EslasticSearch查询的相关api

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html

路由 routing

执行搜索时,它将广播到所有索引/索引碎片。我们可以通过提供路由参数来控制将要搜索哪些分片。从而避免无效的查询。例如,当我们想搜索某人的微博时,路由值可以是用户名:如下所示

POST /twitter/tweet?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" }
            }
        }
    }
}

路由参数可以有多值,用逗号分隔的字符串表示。表示路由到多个分片。

2.自适应副本选择 adaptive replica selection

我们可以启用自适应副本选择来替换循环方式发送请求到数据副本,这允许协调节点基于以下标准将请求发送到被认为是“最佳”的副本:

1.协调节点和包含数据副本的节点之间的过去请求的响应时间 

2.过去的搜索请求需要在包含数据的节点上执行 

3.包含数据的节点上的搜索线程池的队列大小

我们可以通过更改设置打开动态群集

cluster.routing.use_adaptive_replica_selection from false to true:
PUT /_cluster/settings
{
    "transient": {
        "cluster.routing.use_adaptive_replica_selection": true
    }
}
3.统计组

搜索可以与统计分组相关联,统计分组保持每个组的统计聚合。它可以稍后使用索引统计API特别检索。例如,下面是一个搜索主体请求,它将请求与两个不同的组相关联:
POST /_search
{
    "query" : {
        "match_all" : {}
    },
    "stats" : ["group1", "group2"]
}

4.全局搜索超时

个人搜索可能会有一个超时作为请求正文搜索的一部分。由于搜索请求可能来自多个来源,因此Elasticsearch为全局搜索超时设置了一个动态群集级别设置,适用于在请求正文搜索中未设置超时的所有搜索请求。默认值是没有全局超时。设置密钥为search.default_search_timeout,可以使用群集更新设置端点进行设置。将此值设置为-1会将全局搜索超时重置为不超时。

5.搜索的并发性和并行性

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

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

6.查询

查询API允许您执行搜索查询并取回与查询匹配的结果。可以使用简单的查询字符串作为参数或使用请求主体来请求查询。后面我们将会介绍到

多索引多类型

所有查询API都可以应用于索引中的多种类型,并支持多索引语法的多索引。例如,我们可以搜索twitter索引中所有类型的所有文档:

GET /twitter/_search?q=user:kimchy

我们也可以在特定类型中搜索:

GET /twitter/tweet,user/_search?q=user:kimchy

我们还可以在多个索引中搜索具有特定标签的所有推文(例如,每个用户拥有自己的索引时)

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

或者,我们可以使用_all占位符搜索所有可用索引中的所有推文:

GET /_all/_search?q=tag:wow

甚至可以搜索所有索引和所有类型:

GET /_search?q=tag:wow

7.URI查询(使用查询字符串作为参数

通过提供请求参数,可以纯粹使用URI执行搜索请求。在使用此模式执行搜索时,并非所有搜索选项都显示,但对于快速“卷曲测试”可能非常方便。这里是一个例子:

GET twitter/_search?q=user:kimchy
响应如下
{
    "timed_out": false,
    "took": 62,
    "_shards":{
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
    },
    "hits":{
        "total" : 1,
        "max_score": 1.3862944,
        "hits" : [
            {
                "_index" : "twitter",
                "_type" : "_doc",
                "_id" : "0",
                "_score": 1.3862944,
                "_source" : {
                    "user" : "kimchy",
                    "date" : "2009-11-15T14:12:12",
                    "message" : "trying out Elasticsearch",
                    "likes": 0
                }
            }
        ]
    }
}
这种方法通常不建议使用。不过你仍然可以查看官方文档详细学习
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html#_parameters_3
8、通过请求体进行查询

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值