2016-01-14 22 views
0

我對lucene非常陌生,並且希望執行以下操作。假設我的查詢,在lucene中爲不同的查詢詞賦予不同的權重

查詢= 「蘋果果農果iPad的MAC」

,但我想給不同的權重,這些查詢詞一樣,

查詢=「蘋果(0.2)種植者(0.7)水果(0.9)ipad(0.05)mac(0.06)

,直覺是我想排名談論蘋果在農業感比那些關於技術的更高。

我在這裏看到(How to assign a weight to a term query in Lucene/Solr),你可以使用Query.setBoost(),但據我所知,它在查詢中以指定的分數平均提升了所有條款,這不是我想要的。

我該怎麼做?

回答

1
Query query1 = new TermQuery(new Term("your_default_field", "apple")); 
query1.setBoost(0.2); 

Query query2 = new TermQuery(new Term("your_default_field", "growers")); 
query2.setBoost(0.7); 

Query query3 = new TermQuery(new Term("your_default_field", "fruit")); 
query3.setBoost(0.9); 

Query query4 = new TermQuery(new Term("your_default_field", "ipad")); 
query4.setBoost(0.05); 

Query query5 = new TermQuery(new Term("your_default_field", "mac")); 
query5.setBoost(0.06); 

BooleanQuery combining = new BooleanQuery(); 
combining.add(query1, Occur.SHOULD); 
combining.add(query2, Occur.SHOULD); // and so on and so forth 
+0

不應該'Query combining = new BooleanQuery();' 'BooleanQuery combining = new BooleanQuery();' ? – KillBill

+0

斑點!固定 – mindas

0

另一種方式,如果助推分數都是正數,則更容易。

QueryParser parser = new QueryParser("content", new StandardAnalyzer()); 
Query q = parser.parse("Apple^1 juice^5 grower^4 mac^0.2 iphone^0.1); 

searcher.search(q, 10) 
相關問題