刚学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)