一、搜索类型:

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的工作外。还运行初始查询阶段,该阶段计算分布式的词频以更精准地对返回文档打分。

5、count:这是一种特殊的搜索类型。仅仅返回匹配查询的文档数目。


二、搜索位置:

除了上面的控制搜索选项外,还能够控制搜索在何种分片上运行。默认情况下。Elasticsearch使用请求发送到的节点和集群中其它节点上的可用分片和副本。

ES对查询的默认处理一般是正确的,假设有时我们希望改变默认行为,能够在查询指令中通过preference參数来实现。

1、_primary:该值说明仅仅会在主分片上运行操作。不会使用副本。

2、_primary_first:说明假设主分片可用,则在主分片上运行操作;假设主分片不可用,则在其它分片上运行。

3、_local:该值说明假设可能的话,将在请求发送到的节点上的可用分片上运行操作。

4、_only_node:node_id:该值说明将在给定节点ID的节点上运行操作。