ElasticSearch之Search搜索

本文详细介绍了ElasticSearch的Search API,包括URI Search和Request Body Search两种方式,重点讲解了Request Body Search的query搜索、sort排序、explain解释、count数量、from/size分页、scroll滚动和search after翻页。还探讨了Query DSL,如match query、match phrase query、query string query等,以及复合查询如bool query。
摘要由CSDN通过智能技术生成

Search API 查询主要有两种方式:

  • URI Search:
    • 操作简便,可以通过命令行操作;
    • 仅包含部分查询语法
  • Request Body Search:
    • ES 提供了完整的查询语法 Query DSL
# URI Search
Get my_index/_doc/_search?q=user:tom

# Query DSL
Get my_index/_doc/_search
{
    "query": {
        "term": {
            "user": "tom"
        }
    }
}

 

1 URI Search

通过 URI Search 参数来实现搜索,常见的参数有:

  • q:指定查询语句
  • df:q 中不指定字段时默认的查询字段,如果不指定,ES 则会查询所有字段
  • sort:排序
  • timeout:指定超时时间,默认不超时
  • from,size:用于分页
  • _source:返回结果字段,可以设置_source_include 和 _source_exclude
# URI Search 查询my_index 索引中user字段包含tom 的文档
# 按 age 降序排列,返回5~14 个文档,超时1s
GET my_index/_doc/search?q=tom&df=user&sort=age:desc&from=4&size=10&timeout=1s

 

2 Request Body Search

2.1 query 搜索

GET twitter/_doc/_search
{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

 

2.2 sort 排序

允许在特定字段上添加一个或多个排序,每个排序也可以颠倒。 排序是在每个字段级别上定义的,具有 _score 的特殊字段名称按分数排序,_doc 按索引顺序排序。

GET /my_index/_search
{
    "sort" : [
        { "post_date" : {"order" : "asc"}},
        "user",
        { "name" : "desc" },
        { "age" : "desc" },
        "_score"
    ],
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

注:_doc 除了是最有效的排序顺序没有真正的用例。所以如果你不关心文档返回的顺序,那么你应该按 _doc 排序。 这特别有助于滚动。

sort order 可以进行 asc 升序排序 和 desc 降序排序,在对 _score 进行排序时,该顺序默认为 desc,在对其他事物进行排序时默认为 asc。

sort mode option Elasticsearch支持按数组或多值字段排序。 mode 选项控制选择用于对其所属文档进行排序的数组值。 mode 选项可以具有以下值:

  • min:选择最小值
  • max:选择最大值
  • sum:使用所有值的和作为排序值
  • avg:使用所有值的平均值作为排序值
  • median:使用所有值的中值作为排序值,仅适用于数组。
PUT /my_index/_doc/1?refresh
{
   "product": "chocolate",
   "price": [20, 4]
}

POST /_search
{
   "query" : {
      "term" : { "product" : "chocolate" }
   },
   "sort" : [
      {"price" : {"order" : "asc", "mode" : "avg"}}
   ]
}

 

2.3 explain 解释

启用每次匹配对其评分计算方式的说明。

GET /_search
{
    "explain": true,
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

可以通过 explain 参数来查看具体的计算方法,但是要注意:

  1. ES 的算分是按照 shard 进行的,即 shard 的分数计算是相互独立的,所以在使用 explain 的时候注意分片数。
  2. 可以通过设置索引的分片数来避免这个问题

 

2.4 count 数量

count API 允许轻松执行查询并获取该查询的匹配数。 它可以跨一个或多个索引并跨越一个或多个类型执行。

GET /twitter/_doc/_count
{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

 

2.5 from/size 分页

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值