源数据中某字段值为 ‘刘彻’,
使用 wildcardQuery 方法,搜索关键词为 ‘刘彻’却搜不到 , 而如果是 ‘刘’ 或者 ‘彻’就可以。求解这是为什么?
QueryBuilder matchPhrase = QueryBuilders.wildcardQuery(‘author’,"*"+key+"*");
使用 wildcardQuery 方法,搜索关键词为 ‘刘彻’却搜不到 , 而如果是 ‘刘’ 或者 ‘彻’就可以。求解这是为什么?
QueryBuilder matchPhrase = QueryBuilders.wildcardQuery(‘author’,"*"+key+"*");
2 个回复
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自: JavinVan 、Adrian_dan
如果是text 结合keyword类型的话,
建议:wildcard匹配的时候:后面author改成 author.keyword
rochy - rochy_he
赞同来自:
刘彻 应该经过你的分词器后,分词结果为:刘/彻
也就是说 Term(刘)、Term(彻)
所以你查询 刘彻 的时候,因为没有对应的 Term 包含“刘彻”,所以搜索不到
搜索 '刘’ 或者 ‘彻’就可以,是因为有对应的 term 包含搜索的内容