一、搜索类型:
Elasticsearch允许用户选择其所希望的处理查询的方式。因为存在一些不同的情形,对其使用不同的搜索类型才是合适的。为了控制查询的执行方式,我们可以在请求中使用search_type参数,以有下类型可以选择。
1、query_and_fetch:通常是最快也是最简单的搜索类型。查询语句在所有需检查的分片上并行执行,并且所有分片返回结果的规划为size参数的取值。因此,该类型返回的文档数目最大为size参数的取值与分片数目的乘积。
2、query_then_fetch:查询语句首先得到将文档排序所需的信息,然后得到要获取的文档内容的相关分片。与query_and_fetch不同,该类搜索返回的文档数目最大为size参数的取值。
3、dfs_query_and_fetch:该类搜索类似于query_and_fetch。除了完成query_and_fetch的工作外,还执行初始查询阶段,该阶段计算分布式的词频以更精准地对返回文档打分。
4、dfs_query_then_fetch:该类搜索类似于query_then_fetch。除了完成query_then_fetch的工作外,还执行初始查询阶段,该阶段计算分布式的词频以更精准地对返回文档打分。
二、搜索位置:
除了上面的控制搜索选项外,还可以控制搜索在何种分片上执行。默认情况下,Elasticsearch使用请求发送到的节点和集群中其他节点上的可用分片和副本。ES对查询的默认处理通常是正确的,如果有时我们希望改变默认行为,可以在查询指令中通过preference参数来实现。
1、_primary:该值说明只会在主分片上执行操作,不会使用副本。
2、_primary_first:说明如果主分片可用,则在主分片上执行操作;如果主分片不可用,则在其他分片上执行。
3、_local:该值说明如果可能的话,将在请求发送到的节点上的可用分片上执行操作。
4、_only_node:node_id:该值说明将在给定节点ID的节点上执行操作。