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

刚学ES,踩坑是真的多

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

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

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

}

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

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

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

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

总结:

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

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

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

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

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

你可能感兴趣的:(java,elasticsearch)