在Elasticsearch 9.2中,`search_type`参数已经被废弃,取而代之的是两种不同的搜索类型

在Elasticsearch 9.2中,`search_type`参数已经被废弃,取而代之的是两种不同的搜索类型,它们分别是:

1. **DFS Query Then Fetch**:
   - 这种搜索类型使用两阶段搜索:首先执行分布式频率搜索(Distributed Frequency Search,DFS)来收集全局信息,然后执行查询阶段(Query Phase)和取回阶段(Fetch Phase)。
   - 在DFS阶段,协调节点(Coordinating Node)向所有相关数据节点(Data Nodes)发送查询请求,收集统计信息,以便更准确地计算查询的相关性评分。
   - 这种搜索类型适合于需要精确评分的场景,例如,当查询包含`bool`查询的`should`子句时。

2. **Query Then Fetch**(默认):
   - 这是Elasticsearch的默认搜索类型,它直接执行查询和取回操作,不进行DFS阶段。
   - 在查询阶段,协调节点根据本地信息执行查询,然后取回与查询匹配的文档。
   - 这种搜索类型通常更快,但在某些情况下可能不如DFS查询精确。

### 两种搜索类型的区别:

- **查询阶段**:
  - DFS Query Then Fetch:执行DFS阶段以收集全局信息,然后执行查询。
  - Query Then Fetch:直接执行查询,不收集全局信息。

- **评分准确性**:
  - DFS Query Then Fetch:使用全局信息进行评分,评分更准确。
  - Query Then Fetch:使用本地信息进行评分,可能不够精确。

- **性能**:
  - DFS Query Then Fetch:可能比Query Then Fetch慢,因为它涉及额外的DFS阶段。
  - Query Then Fetch:通常更快,因为它避免了DFS阶段。

- **适用场景**:
  - DFS Query Then Fetch:适用于需要精确评分的复杂查询。
  - Query Then Fetch:适用于对评分精度要求不高的场景。

### 搜索流程分析:

- **协调节点**:
  - 接收搜索请求,并根据搜索类型决定搜索流程。

- **数据节点**:
  - 在DFS Query Then Fetch中,数据节点参与DFS阶段,收集并返回统计信息。
  - 在Query Then Fetch中,数据节点仅参与查询和取回阶段。

- **查询阶段**:
  - 根据搜索类型执行查询操作。

- **取回阶段**:
  - 根据查询结果,从数据节点取回匹配的文档。

### 示例:

```json
GET /index_name/_search
{
  "query": {
    "match": {
      "content": "search term"
    }
  },
  "search_type": "dfs_query_then_fetch"  // 或 "query_then_fetch"
}
```

在这个示例中,我们使用`match`查询来搜索`index_name`索引,并指定了搜索类型。虽然`search_type`参数在Elasticsearch 7.x版本中已经被废弃,但在9.2版本中仍然可以使用。

在实际应用中,选择哪种搜索类型取决于具体需求和查询的复杂性。如果对评分的精确性有较高要求,可以选择DFS Query Then Fetch;如果对性能有较高要求,可以选择Query Then Fetch。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值