2015-11-01 72 views
0

我正在尋找一個Lucene(Java)中的相似性模塊,它給出了一個基於權重的評分。我知道這很模糊,最好用一個例子來解釋。Lucene自定義相似性/評分

Document 1 
----------- 
Firstname: Francesca 

Document 2 
----------- 
Firstname: Francisco 

名字字段是使用Doublemetaphone &精製的Soundex語音算法進行分析。在索引階段。

因此,倒排索引看起來像這樣(後兩項由Doublemetaphone和精緻的探測法分別給予):

francesca ===> Doc1 
francisco ===> Doc2 
FRNS ===> Doc1, Doc2 
F29083030 ===> Doc1 
F2908306 ===> Doc2 

現在我的搜索查詢是這樣的: 姓:「弗朗西斯」

顯然,對於Doc1,所有4個術語都匹配。對於每場比賽,我想給出一個25%的比例(我事先知道一個給定學期最多隻能有4個擴展學期

按照這個原則,我想給出下面的分數:

Doc1 (100) [Reason: All 4 terms match] 
Doc2 (25) [Reason: Only FRNS term matches, rest don't match] 

現在,這裏我的問題是,要實現這一點,沒有任何相似性模塊提供了架子。如果不是,我相信我應該延長DefaultSimilarity並覆蓋必要的方法,但哪裏是模塊?稱爲相似度模塊,並總結每個文檔的所有分數?我要問的原因是我會擴展這個基於權重的其他字段的評分,在這種情況下,每個文檔的總分數將是個人加權平均值的總和ual字段。因此,我還應該自定義總結各個字段分數的代碼並重寫它以查找平均值。有人可以展示一些指針嗎?謝謝。

回答

0

一個很好的開始,這將是約爾格Prante項目 - https://github.com/jprante/elasticsearch-payload

隨着其他項目,他還擴大相似性模塊。

進一步的實施,我會建議你看看令牌的類型字段或有效載荷字段來推斷得分。

在下面的文件 - https://github.com/jprante/elasticsearch-payload/blob/master/src/main/java/org/xbib/elasticsearch/payload/PayloadPlugin.java

你可以看到下面就如何添加相似模塊的代碼示例。

public void onModule(SimilarityModule module) { 
    module.addSimilarity("payload_similarity", PayloadSimilarityProvider.class); 
} 
+0

謝謝你。但是我也看到的是我需要重寫的課程來平均個人分數(每場)。 – user1189332

+0

已更新的答案。 –