0

这是我的目标。一个用户有一个技能+熟练度元组的列表。

我们希望根据一些技能/经验标准来寻找用户:

  • java, 新手

  • php,专家

    mysql,高级

* 技能非常需要并且所有其他技能都很好。达到或超过(基于经验)的用户将排名最高。但它也应该很好地降解。如果没有用户同时拥有 java 和 php 经验,但他们拥有一项非常需要的技能,那么他们应该排在首位。只有一项可选技能的用户可能会出现在底部。

我的一个想法是在如下领域索引用户的技能:

skill_novice: java
skill_novice: php
skill_advanced: php
skill_expert: php
skill_novice: mysql
skill_advanced: mysql

...这样我至少可以做一个逻辑查询来找到满足高度期望技能的人:

(skill_novice:java AND skill_expert:php)

但这不会很好地降低(如果没有找到匹配项),也不会找到可选技能。也许相反,我可以做这样的事情:

skill_novice:java AND
  (skill_novice:php^0.1 OR skill_advanced:php^0.2 OR skill_expert:php^0.3)

有没有更好的方法来实现这一点?

4

1 回答 1

0

我认为您可以在索引时使用不同的值来提升字段:

  // mysql expert
  Field mysqlf = new Field("skill", "mysql", 
                                    Field.Store.YES, 
                                    Field.Index.ANALYZED); 
  mysqlf.setBoost(10.0F); 
  // mysql begginer
  mysqlf = new Field("skill", "mysql", 
                                    Field.Store.YES, 
                                    Field.Index.ANALYZED); 
  mysqlf.setBoost(1.0F); 

您需要启用规范才能使其正常工作。

于 2012-06-27T13:41:55.940 回答