Lucene非索引存储的优先级检索

本文介绍了使用Lucene进行高效信息检索的方法,包括如何通过设置不同的boost值来调整字段权重,以及利用BooleanQuery来组合多个查询条件实现更精确的搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Field级别上设置boost并存储在索引上好像不是很灵活,一旦索引建成无法修改。

 感觉比较灵活的方式是存储建索引的时候并不设置boost,在检索创建过滤器的时候在Query上设置boost是个好办法。

Query qTitle = IKQueryParser.parse("title", "中文分词工具包");
qTitle.setBoost((float)100);
Query qBody = IKQueryParser.parse("body", "好好学习");
qBody.setBoost((float)50);
BooleanQuery bq = new BooleanQuery();
bq.add(qTitle, BooleanClause.Occur.SHOULD);
bq.add(qBody, BooleanClause.Occur.SHOULD);

TopDocs docs = searcher.search(bq, null, 100000);
System.out.println("HITS:"+docs.totalHits);
for(int i = 0; i< docs.totalHits;i++){
    ScoreDoc s_doc = docs.scoreDocs[i];
    Document doc = searcher.doc(s_doc.doc);
    System.out.println(doc.get("id"));
}

实际上是把每个检索字段分别建立一个Query,然后在Query上设置boost。

最后建立一个BooleanQuery,把所有Query合并进去。

合并的时候需要设置检索的合并关系:

有三种:

BooleanClause.Occur.MUST 
BooleanClause.Occur.MUST_NOT 
BooleanClause.Occur.SHOULD 

它们的组合关系代表的意思如下: 
1、MUST和MUST表示“与”的关系,即“并集”。 
2、MUST和MUST_NOT前者包含后者不包含。 
3、MUST_NOT和MUST_NOT没意义 
4、SHOULD与MUST表示MUST,SHOULD失去意义; 
5、SHOUlD与MUST_NOT相当于MUST与MUST_NOT。 
6、SHOULD与SHOULD表示“或”的概念。 

转载于:https://my.oschina.net/jing31/blog/9823

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值