【ElasticSearch搜索推荐】基于search-time的match_phrase_prefix搜索推荐
数据准备
//创建索引 PUT my_index { "mappings": { "my_type": { "properties": { "title": { "type": "keyword" } } } } }
//准备数据 POST my_index/my_type { "title":"hello losser" } POST my_index/my_type { "title":"hello win" } POST my_index/my_type { "title":"hello world" }
//搜索推荐 方式一 GET my_index/my_type/_search { "query": { "match_phrase_prefix": { "title": "hello wo" } } }
//搜索推荐 方式二 GET my_index/my_type/_search { "query": { "match_phrase_prefix": { "title": { "query": "hello losser", "slop":1, "max_expansions": 5 //表示除本身外,最多可扩展数 为什么0和1 都是结果一样? } } } }
注意:
1.原理跟match_phrase类似,唯一的区别,就是把最后一个term作为前缀去搜索
先执行match,查找出hello对应的doc,然后使用wo作为前缀扫描整个倒排索引,找到所有w对应的doc
根据你的slop去计算,看在slop范围内,能不能让hello w,正好跟doc中的hello和w开头的单词的position相匹配
也可以指定slop,但是只有最后一个term会作为前缀
2.尽量不要用,因为,最后一个前缀始终要去扫描大量的索引,性能可能会很差

浙公网安备 33010602011771号