elasticsearch7.XQueryBuilders.termQuery()查询中文没有值?

来先看图

在这里插入图片描述

我的字段是 name 和 age
QueryBuilder queryBuilder = QueryBuilders.termQuery(“name.keyword”, “淘宝”);
name 是你的字段名 其实真正的精准搜索值在字段名在的keyword
但是这种方式下,你必须输入完整的 字段名字,缺少一部分都会查不出来
这种方式不好。

所以使用:matchPhraseQuery 实现精准查询

 MatchPhraseQueryBuilder title = QueryBuilders.matchPhraseQuery("title", keyword);

也可以使用:matchPhrasePrefixQuery

QueryBuilders.matchPhrasePrefixQuery(“supplierName”,param)

matchPhraseQuery和matchQuery等的区别,在使用matchQuery等时,在执行查询时,搜索的词会被分词器分词,而使用matchPhraseQuery时,不会被分词器分词,而是直接以一个短语的形式查询,而如果你在创建索引所使用的field的value中没有这么一个短语(顺序无差,且连接在一起),那么将查询不出任何结果。

总结:

在java rest client中调用elasticsearch中的数据,精准匹配的termQuery查不到数据,这个问题是java rest client客户端自带的bug,换用matchPhraseQuery直接替换即可。有点坑!
在elastic权威指南一书中是这样给出建议的:"匹配查询 match 是个 核心 查询。无论需要查询什么字段, match
查询都应该会是首选的查询方式。它是一个高级 全文查询
,这表示它既能处理全文字段,又能处理精确字段。"这就意味着match查询是高级查询,底层使用了term查询。

结论:相关度查询使用match,精确字段查询使用matchPhrase即可。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值