Elasticsearch 大文本字段中的中文精确查询

  1. 云栖社区>
  2. 博客列表>
  3. 正文

Elasticsearch 大文本字段中的中文精确查询

ebxinxi 2018-11-07 10:48:23 浏览2319 评论0

摘要: 中文精确查询用Elasticsearch怎么做? Google了不少文章,个人觉得没有抓住重点,或者Elasticsearch升级后有所改变。 背景介绍 前人精品文章推荐简单来讲,从Elasticsearch设计的初衷来讲, match查询用来做搜索引擎类似的评分查询,精确匹配查询用term来做,参见各种Elasticsearch的手册,不展开。

中文精确查询用Elasticsearch怎么做? Google了不少文章,个人觉得没有抓住重点,或者Elasticsearch升级后有所改变。

背景介绍

前人精品文章推荐
简单来讲,从Elasticsearch设计的初衷来讲, match查询用来做搜索引擎类似的评分查询,精确匹配查询用term来做,参见各种Elasticsearch的手册,不展开。中文的精确查询由于存在index保存阶段的分词和search阶段的分词,所以直接沿用这些方法并不适用。

问题:中文查询用match能查到,用term查不到。

准确的说是比如字段 title:北京奥运 , 查找 “北京奥运” ok, 查找 “北京” 没有,查找"北"在默认情况下可以找到很多。

解决办法: 采用term查询里面的wildcard query

GET /_search
{
    "query": {
        "wildcard" : { "user" : "ki*y" }
    }
}

注意事项

Elasticsearch 6.0版本 Text字段 不再提供 not_analysed 属性,请改用keyword类型, 字段长度受限: Lucene's term byte-length limit of 32766 。中文utf8字符串长度 32766/4=8190+ 比较保险。

【云栖快讯】你想见的Java技术专家都在这了,向大佬提问,有问题必答  详情请点击

网友评论

ebxinxi
文章14篇 | 关注0
关注
提供基于开源Elasticsearch及商业版X-pack插件,致力于数据分析、数据搜索等场... 查看详情
基于大数据的移动云服务。帮助App快速集成移动推送的功能,在实现高效、精确、实时的移动推送的... 查看详情
是解决用户结构化数据搜索需求的托管服务,支持数据结构、搜索排序、数据处理自由定制。 为您的网... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里云总监课正式启航

阿里云总监课正式启航