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

本文介绍了在Elasticsearch中处理中文精确查询的问题,指出match查询可能无法满足需求。解决办法是使用wildcardquery配合term查询,同时提到6.0版本后需使用keyword类型以避免分词问题。
摘要由CSDN通过智能技术生成

中文精确查询用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+ 比较保险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值