ELK,萌萌哒

ES多字段查询,如何做到精确匹配

Elasticsearch | 作者 LXJ | 发布于2018年04月04日 | 阅读数:19257

有个问题是这样的,对用户输入的关键字 比如:幼儿园管理混乱严重影响孩,用户输入了这段话,ES文档里面有一条数据,是这样的:幼儿园管理混乱严重影响孩子生活学习,查询的时候,会查询不出来。但是输入幼儿园管理混乱严重影响孩子,就可以查询得到,前后的关键字就差别在【孩子】,一个有子,一个没有子。这种有解决方法吗?
我的查询语句是这样写的
boolQueryBuilder.must(QueryBuilders.multiMatchQuery(keyValue, key.split(","))
.type(MultiMatchQueryBuilder.Type.PHRASE).maxExpansions(1).slop(1).minimumShouldMatch("100%").operator(Operator.AND));
求各路大神指点下
已邀请:

imp

赞同来自:

minimumShouldMatch("100%")把这个去了

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

赞同来自:

用march_phrase结合slop
或者:match_phrase_prefix
参考:http://mp.weixin.qq.com/s/v-A5cqv4LDYUyuSuTjR8og

jlhde123

赞同来自:

你这个问题很多可能
1、Operator.AND
我估计“幼儿园管理混乱严重影响孩“ 这个分词,会单独出现“孩”这个单词
实际上句子分词来的词应该是“孩子“,导致一个词没匹配,所以搜索不到
2、miniShouldmatch ,100%也就是所有分词都必须匹配 ,同理上的孩子和孩的分词
3、mutil_query用了type为phase 代表短语查询,意思是所有分词必须匹配顺序都要一致,那么你上面的operator和miniShouldMatch都失效了
 

要回复问题请先登录注册