搜索API

大多数搜索API都是多索引的,但说明API端点除外。

路由

执行搜索时,它将广播到所有索引/索引分片(副本之间的循环)。 可以通过提供路由参数来控制将搜索哪些分片。 例如,在索引推文时,路由值可以是用户名:

POST /twitter/_doc?routing=kimchy
{
    "user" : "kimchy",
    "postDate" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}

在这种情况下,如果我们只想搜索特定用户的推文,我们可以将其指定为路由,从而导致搜索只接触相关的分片:

POST /twitter/_search?routing=kimchy
{
    "query": {
        "bool" : {
            "must" : {
                "query_string" : {
                    "query" : "some query string here"
                }
            },
            "filter" : {
                "term" : { "user" : "kimchy" }
            }
        }
    }
}

路由参数可以是多值,为逗号分隔的字符串。这将导致命中路由值匹配的相关分片。

自适应副本选择

作为以循环方式发送到数据副本的请求的替代方法,您可以启用自适应副本选择。这允许协调节点根据如下标准,将请求发送到被认为“最佳”的副本:

  • 协调节点与包含数据副本的节点之间传递请求的响应时间
  • 搜索请求在包含数据的节点上的执行时间
  • 包含数据的节点上的搜索线程池的队列大小

可以通过将动态集群设置cluster.routing.use_adaptive_replica_selectionfalse更改为true来启用此功能:

PUT /_cluster/settings
{
    "transient": {
        "cluster.routing.use_adaptive_replica_selection": true
    }
}

统计分组

搜索可以与统计组相关联,统计组维护每个组的统计聚合。稍后可以使用索引统计信息 API专门检索它。例如,这是一个搜索正文请求,它将请求与两个不同的组相关联:

POST /_search
{
    "query" : {
        "match_all" : {}
    },
    "stats" : ["group1", "group2"]
}

全局搜索超时

作为搜索请求体的一部分,单个搜索可能会超时。由于搜索请求可能有许多来源,因此Elasticsearch具有全局搜索超时的动态集群级设置,该设置适用于未在请求正文中设置超时的所有搜索请求。这些请求将在指定时间后取消搜索。因此,关于超时响应的相同警告适用。

设置键为search.default_search_timeout,可以使用更新集群设置端点进行设置。默认值为无全局超时。将此值设置为-1会将全局搜索超时重置为无超时。

取消搜索

可以使用标准任务取消机制取消搜索。默认情况下,正在运行的搜索仅检查它是否在片段的边界上被取消,因此大片段延迟可能会使请求延迟。通过将动态集群级别设置search.low_level_cancellation设置为true,可以提高搜索取消响应效率。但是,它带来了更频繁的取消检查的额外开销,这在大型快速运行的搜索查询中是明显的。更改此设置仅影响更改后开始的搜索。

并发和平行搜索

默认情况下,Elasticsearch不会根据请求命中的分片数拒绝任何搜索请求。虽然Elasticsearch将优化协调节点上的搜索执行,但大量分片会对CPU和内存产生重大影响。以这样的方式组织数据通常更好,即更少的大分片。如果您要配置软限制,可以更新群集设置action.search.shard_count.limit,以拒绝搜索过多分片的搜索请求。

请求参数max_concurrent_shard_requests可用于控制搜索API为请求执行的最大并发分片请求数。此参数应用于保护单个请求不会使群集过载(例如,默认请求将命中群集中的所有索引,如果每个节点的分片数量很高,则可能导致碎片请求被拒绝)。此默认值基于群集中的数据节点数,但最多为256个。

results matching ""

    No results matching ""