在lucene中为不同的查询词分配不同的权重

ehxuflar  于 2022-11-07  发布在  Lucene
关注(0)|答案(2)|浏览(202)

我对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(),但据我所知,它会按指定的分数平均提升查询中的所有术语,这不是我想要的。
我该怎么做?

monwx1rj

monwx1rj1#

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
wtlkbnrh

wtlkbnrh2#

另一种方式是如果提升分数都是正的则容易得多。

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

相关问题