Lucene 高阶查询的六脉神剑 —— QueryParser

上篇我们介绍了 Lucene 多样的查询模式,每一种都是相互独立的用来解决特定查询目标的 Query 对象。本节我们要将这些查询模式使用 QueryParser 组合起来进行合并查询 —— 用一个文本字符串表达式来表示所有的查询模式。

QueryParser 的基本作用是将一个满足特定语法的字符串转换成相应的查询对象。我们可以不再需要使用组合对象的方式来手动构造复合逻辑查询,而是通过一个单行字符串就可以完成原先需要数行代码才能完成的查询功能。

关键词查询 TermQuery 与组合查询 BooleanQuery

关键词查询是最简单的查询,在 QueryParser 的语法里它就是一个「无空格」普通的字符串。

var analyser = new HanLPAnalyzer();
var parser = new QueryParser("content", analyser);
var query = parser.parse("北京大学");
System.out.println(query);
var hits = searcher.search(query, 10).scoreDocs;

--------------
content:北京大学

var query = parser.parse("北京 大学");
System.out.println(query);

------------
content:北京 content:大学

System.out.println(query.getClass());

------------
class org.apache.lucene.search.BooleanQuery

var query = parser.parse("+北京 +大学");

var query = parser.parse("+北京 -大学")

注意 QueryParser 会使用传递进去的 analyzer 对象对字符串进行分词,最开始例子的「北京大学」解析后之所以是单个字符串,那是因为「北京大学」本身就是一个完整的原子词汇。如果我们试试「北京林业大学」就会完全是不一样的结果,它是三个词汇的或运算。

var query = parser
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值