准备工作
删除之前的my_index
1 | DELETE /my_index |
然后再添加几条测试用的数据
1 | POST /my_index/my_type/1 |
搜索联想
比如说我们在Google的搜索框中输入了elasti,搜索框下面可能会出来elasticsearch, elasticsearch权威指南等这些信息.
我们可以用match_phrase_prefix来实现这个效果,原理和match_phrase类似,唯一的区别就是会把最后一个term作为前缀去搜索.
比如我们搜索hello w, hello就是去进行match,搜索对应的document,最后一个term是w,w就会被作为前缀,去扫描整个倒排索引,找到所有的w开头的document,然后找到既包含hello又包含w开头的document,根据你的slop去计算,看在slop范围内,能不能让hello w,正好跟document中的hello和w开头的单词的position相匹配
指定slop的话,也是只会将最后一个term作为前缀
max_expansions
默认情况下,前缀搜索要扫描所有倒排索引中的document,按时这样性能太差了,可以使用max_expansions指定prefix最多匹配多少个document,超过这个数量就不继续匹配了,限定性能
语法
1 | GET /my_index/my_type/_search |
返回值:
1 | { |
查询出来的都是包含hello和w是前缀的数据
在实际中,这种搜索也是尽量不要用,因为最后一个前缀始终要去扫描大量的索引,性能可能会很差