Elasticsearch中的搜索类型与搜索位置

作者:谁偷走了我的奶酪2024.01.08 12:39浏览量:5

简介:本文将介绍Elasticsearch中可用的搜索类型和搜索位置选项,包括query_and_fetch、query_then_fetch、dfs_query_and_fetch和dfs_query_then_fetch等。同时,还将解释如何控制搜索在何种分片上执行。

Elasticsearch中,用户可以选择不同的搜索类型来控制查询的运行方式。以下是几种常用的搜索类型:

  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使用请求发送到的节点和集群中其他节点上的可用分片和副本。可以通过在请求中设置search_type参数来指定搜索类型,例如:
  • search?search_type=query_and_fetch
  • search?search_type=query_then_fetch
  • search?search_type=dfs_query_and_fetch
  • search?search_type=dfs_query_then_fetch
  • search?search_type=count
    请注意,在选择搜索类型时,应该根据实际的应用场景和需求进行权衡。例如,如果需要快速获取匹配的文档数量,可以选择count搜索类型。如果需要获取详细的匹配文档内容并进行排序,可以选择query_and_fetch或query_then_fetch搜索类型。
    此外,还可以通过设置routing参数来控制搜索在特定的分片上执行。这可以帮助用户更好地管理大规模数据集并提高查询性能。例如,可以指定某个特定的分片进行查询:
  • search?routing=shard_id&search_type=query_and_fetch
    需要注意的是,在设置routing参数时,需要确保指定的分片存在且可用。否则,查询可能会失败或返回不准确的结果。
    总结起来,Elasticsearch提供了多种搜索类型和搜索位置选项,用户可以根据实际需求选择合适的选项来优化查询性能和提高数据检索的准确性。在选择搜索类型时,需要考虑查询需求、数据规模和分片策略等因素。在设置搜索位置时,需要考虑数据分布和分片可用性等因素。