二十三、Elasticsearch用match_phrase_p
2017-07-17 本文已影响171人
编程界的小学生
1、解释什么是搜索推荐
比如百度搜elas,他会自动提示我们elastic search或者elastic search权威指南等,这就叫搜索推荐
2、语法
GET my_index/my_type/_search
{
"query": {
"match_phrase_prefix": {
"title": {
"query": "hello w"
}
}
}
}
3、原理
原理跟match_phrase类似,唯一的区别是把最后一个term作为前缀去搜索
hello就是去进行match,搜索对应的document
w会作为前缀,去扫描整个倒排索引,找到所有w开头的doc
然后找到所有doc中,既包含hello,又包含w开头的字符的doc
根据你的slop去计算,看在slop范围内,能不能让hello w正好跟doc中的hello和w开头的单词的position相匹配。
也可以指定slop,但是只有最后一个term会作为前缀
max_expansions:制定prefix最多匹配多少个term,超过这个数量就不继续匹配了,限定性能。
默认情况下,前缀要扫描所有的倒排索引中的term,去查找w打头的单词,但是这样性能太差。可以用max_expansions限定,w前缀最多匹配多少个term,就不再继续搜索倒排索引了。
GET my_index/my_type/_search
{
"query": {
"match_phrase_prefix": {
"title": {
"query": "hello w",
"slop" : 5,
"max_expansions": 10
}
}
}
}
尽量不要用,因为,最后一个前缀始终要去扫描大量的索引,性能可能会很差!!!!
若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:
qrcode_for_gh_577b64e73701_258.jpg