Elasticsearch 参考指南(Search API)

Search API

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

路由

执行搜索时,它将广播到全部索引/索引碎片(副本之间的循环负载),能够经过提供routing参数来控制将搜索哪些碎片,例如,在索引推文时,路由值能够是用户名:并发

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

在这种状况下,若是咱们只想搜索特定用户的推文,咱们能够将其指定为路由,从而致使搜索只触及相关的分片:elasticsearch

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

路由参数能够是多值的,表示为逗号分隔的字符串,这将致使命中路由值匹配的相关碎片。post

自适应副本选择

做为以循环方式发送到数据副本的请求的替代方法,你能够启用自适应副本选择,这容许协调节点根据许多标准将请求发送到被认为“最佳”的副本:优化

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

这能够经过将动态集群设置cluster.routing.use_adaptive_replica_selectionfalse更改成true来启用此功能:线程

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

统计组

搜索能够与统计组相关联,统计组维护每一个组的统计聚合,稍后可使用索引统计API专门检索它,例如,如下是将请求与两个不一样的组相关联的搜索体请求:code

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个。

搜索

搜索API容许你执行搜索查询并返回与查询匹配的搜索命中,可使用简单查询字符串做为参数或使用请求体来提供查询。

多索引

全部搜索API均可以应用于多个索引,并支持多索引语法,例如,咱们能够搜索twitter索引中的全部文档:

GET /twitter/_search?q=user:kimchy

咱们还能够在多个索引中搜索具备特定标记的全部文档(例如,当每一个用户有一个索引时):

GET /kimchy,elasticsearch/_search?q=tag:wow

或者咱们可使用_all搜索全部可用的索引:

GET /_all/_search?q=tag:wow

上一篇:?refresh

相关文章
相关标签/搜索