在前面我们介绍了很多的elasticsearch的搜索语法,但是在实际过程中我们如何选择呢?也就是什么时候使用term查询?什么时候使用match查询?什么时候使用filter查询呢?这篇文章我们就来介绍下大致的一些场景下的选择。
一、如果场景是类似百度或者网站这种,需要接收用户的输入的,然后根据这些输入再进行查询,该如何选择呢?
这种场景由于是用户主动输入的,由于用户的输入内容无法固定,都是随机的,因此这里首先考虑分词,所以在查询的时候,使用match或者query_string搜索是比较好的选择。
二、如果场景是希望将输入的内容作为词组,然后在搜索中要返回包含这些词组的文档,该如何选择呢?
这种场景优先考虑match_phrase查询,并且同时根据实际情况设置下slop,例如英文的场景下slop为1
三、如果场景是没有被分词的存储场景中,该如何选择呢?
这种场景毋庸置疑选择term查询
四、如果希望组合不同的搜索请求,需要进行一次性搜索,该如何选择呢?
这种场景就要使用bool查询
五、如果希望在某个文档的多个字段搜索特定的关键词,该如何选择呢?
这种场景直接选择multi_match查询
六、如果希望一次搜索返回所有的文档,该如何选择呢?
这种场景就要选择match_all查询
七、如果希望在字段中搜索一定的取值范围,该如何选择呢?
这种场景就要选择range查询
八、如果希望在字段搜索中,搜索以特定字符开头的取值,该如何选择呢?
这种场景可以选择match_phrase_prefix或者prefix查询
九、如果希望根据用于已经输入的内容,提供单个关键词的自动提示功能怎么办呢?
这种场景可以选择match_phrase_prefix或者prefix查询
十、如果希望搜索特点字段没有取值的文档,该如何选择呢?
这种就用exists查询即可
备注:
1、搜索是一门很高高深学问,也产生了一个nlp的学科,日常我们使用elasticsearch进行搜索都是在一些普通的场景下。具体使用哪种搜索方式都是按照实际情况来选择,没有100%确定的选择项。
还没有评论,来说两句吧...