19、ElasticSearch 7.x 使用term配合keyword进行搜索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19、ElasticSearch 7.x 使用term配合keyword进行搜索相关的知识,希望对你有一定的参考价值。

参考技术A

主要内容:使用term配合keyword进行搜索

根据用户ID、是否隐藏、帖子ID、发帖日期来搜索帖子

​查看映射

type=text,默认会设置两个field,一个是field本身,比如articleID,就是分词的;还有一个的话,就是field.keyword,articleID.keyword,默认不分词,会最多保留256个字符

constant_score的用处

当我们不关心检索词频率TF(Term Frequency)对搜索结果排序的影响时,可以使用constant_score将查询语句query或者过滤语句filter包装起来。

term filter/query:对搜索文本不分词,直接拿去倒排索引中匹配,你输入的是什么,就去匹配什么

没有搜到任何的信息,原因参见后面1.6节的分析,需要使用keyword避免分词查询。

articleID.keyword,是ES内置建立的field,当插入articleID的时候,会建立两次索引,一次是自己本身,是要分词的,分词后放入倒排索引;另外一次是基于articleID.keyword,不分词,保留最多256个字符

所以term filter,对text过滤,可以考虑使用内置的field.keyword来进行匹配。但是有个问题,默认就保留256个字符。所以尽可能还是自己去手动建立索引,指定type=keyword即可。

默认是analyzed的text类型的field,建立倒排索引的时候,就会对所有的articleID分词,分词以后,原本的articleID就没有了,只有分词后的各个word存在于倒排索引中。
term,是不对搜索文本分词的,XHDK-A-1293-#fJ3 会使用 XHDK-A-1293-#fJ3进行匹配。

但是articleID建立索引的时候, XHDK-A-1293-#fJ3 会分词为 xhdk,a,1293,fj3

将1.1中的示例数据插入进来

这次可以根据keyword正常查询到了

(1)term filter:根据exact value进行精确搜索,数字、boolean、date天然支持
(2)建索引时文本需要指定keyword,才能用term query
(3)term相当于SQL中的单个where条件

参考文章:

Elasticsearch--constant_score_大数据_u014431852的博客-CSDN博客 https://blog.csdn.net/u014431852/article/details/52802747

以上是关于19、ElasticSearch 7.x 使用term配合keyword进行搜索的主要内容,如果未能解决你的问题,请参考以下文章

Springboot 2.5.x整合ElasticSearch 7.1x

Elasticsearch 7.x 最详细安装及配置

Kubernetes上的Elasticsearch 7.x设置

ElasticSearch 7.x 入门与实战

Elasticsearch 7.X RESTful 风格 高级查询

Elasticsearch 7.X 中英混合分词器 Smart Chinese 使用