沙师弟,师父的充电器掉了

模糊匹配 wildcardQuery 小问题

Elasticsearch | 作者 menzhipeng | 发布于2018年11月08日 | 阅读数:23666

源数据中某字段值为  ‘刘彻’,
使用 wildcardQuery 方法,搜索关键词为 ‘刘彻’却搜不到 , 而如果是 ‘刘’ 或者 ‘彻’就可以。求解这是为什么?
 

QueryBuilder matchPhrase = QueryBuilders.wildcardQuery(‘author’,"*"+key+"*");
 
已邀请:

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自: JavinVan Adrian_dan

1确认下你的mapping author字段的类型,
如果是text 结合keyword类型的话,
建议:wildcard匹配的时候:后面author改成 author.keyword

rochy - rochy_he

赞同来自:

wildcardQuery 是 term 级别的 query
刘彻 应该经过你的分词器后,分词结果为:刘/彻
也就是说 Term(刘)、Term(彻)
所以你查询 刘彻 的时候,因为没有对应的 Term 包含“刘彻”,所以搜索不到
搜索 '刘’ 或者 ‘彻’就可以,是因为有对应的 term 包含搜索的内容

要回复问题请先登录注册