2012-06-27 61 views
0

這是我的目標。用戶具有技能+熟練度元組列表。Solr Lucene - 不確定如何索引數據,以便文檔正確得分

我們希望基於一些技巧/經驗標準來查找用戶:

  • 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) 

有沒有更好的方法來實現這個目標?

回答

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); 

您需要啓用該規範工作。

+0

謝謝。我讀到,solr的提升只是每場,而不是場的價值。所以這裏「技能」就是這個字段,「mysql」就是價值。或者這是不是真的或過時的信息? – nogridbag

+0

似乎工作正常,謝謝。 – nogridbag