2012-03-22 18 views
8

在我的情況下,文檔有兩個字段,例如「title」和「views」。 「視圖」表示人們訪問此文檔的次數。如:「title」:「iphone」,「views」:「10」。 我必須制定一個策略,將分配一些權重的意見,如相關性分數計算的分數(標題)* 0.8 +分數(意見)* 0.2。 lucene是否可以做到這一點?我想知道是否有一些與這個問題有關的算法。Lucene:如何提升某些特定字段

回答

10

這裏是你如何能做到這一點:

Query titleQuery, viewsQuery; 

titleQuery.setBoost(0.8); 
viewsQuery.setBoost(0.2); 
BooleanQuery query = new BooleanQuery(); 
query.add(titleQuery, Occur.MUST); // or Occur.SHOULD if this clause is optional 
query.add(viewsQuery, Occur.SHOULD); // or Occur.MUST if this clause is required 

// use query to search documents 

將比分成正比0.8*score(titleQuery) + 0.2*score(viewsQuery)(到乘常數)。

要利用您的views字段,您可能需要使用ValueSourceQuery

+0

如果我明白了correctyl setBoost已被棄用,並且這些天使用https://lucene.apache.org/core/5_5_0/core/org/apache/lucene/search/BoostQuery.html shoudl – Dannyboy 2017-10-18 19:51:41

5

您可以通過3種方式提升。根據您的需求,你可能想使用組合

文檔級提升 - 而索引 - 通過調用 document.setBoost()之前,文檔被添加到索引。

文檔的字段級別提升 - 索引 - 通過在向文檔添加字段之前(以及 將文檔添加到索引之前)調用 field.setBoost()。

查詢級別提升 - 在 搜索期間,通過設置查詢子句的提升,調用 Query.setBoost()。

來源:http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/scoring.html

+0

document.setBoost()很久以前就被棄用了。 – Dannyboy 2017-10-18 19:52:35

相關問題