ES中解决模糊搜索的时候搜索一个中文可以,两个以上中文就不行的情况

刚学ES,踩坑是真的多

我在使用Elasticsearch创建索引的时候,并没有用代码实现,而是使用的logstash去读取配置文件来生成,这个坑就埋下了,创建索引的时候没有指定字段的类型,所以在查询的时候,用wildcard去匹配的时候发现了问题,

我在匹配英文的时候,可以写多个关键词,比如我有一条字段名为name,值为lmj的数据,我去搜索"l*"和"lm*"都可以将数据检索出来,而如果有一条字段名为name,值为芜湖大司马的数据,用"芜*"可以检索出,用"芜湖*"就不能检索出了,因为用的wildcard去匹配,我在想是不是这个不能匹配多个,后面去到处找解决办法,发现了一篇文章,提示说类型不同,分词的问题,然后我检索的时候用的

{
          "wildcard": {
            "name.keyword": "*芜湖*"
         }

}

这里放一个索引状态的截图

 可以看出这个NAME的type为text,因为没有用分词器,所以会有这个问题

这个就可以检索出想要的数据,注意,我这里用的*芜湖* ,不建议将* 放在最前面,会影响性能。

总结:

创建索引没有定义字段的type,查中文的时候需要在字段名后面加上.keyword。

这里把大佬的文章放在这里:

ES中如何实现like模糊查询_弹指天下-CSDN博客_es 模糊查询

这里还有大佬对我这个问题的详解:

es ElasticSearch 中文分词 - 一个人的孤独自白 - 博客园 (cnblogs.com)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值