Elasticsearch学习之路(五)_SearchAPI

本文详细介绍了如何使用Elasticsearch的_search接口进行查询,包括指定索引范围、使用GET请求的查询参数、JSON DSL查询方法,以及示例演示了分页、排序、字段选择和复杂查询操作。掌握这些技巧有助于高效地在大规模数据中进行信息检索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Search API

指定查询的索引
1. 我们需要在URL中带上_search来表示这次操作是个查询操作
语法范围
/_search集群上所有的索引
/index1/_searchindex1
/index1,index2/_searchindex1和index2
/index*/_search以index开头的索引
URI Search
# 以GET请求在URL中使用查询参数
# 使用“q”,指定查询字符串 query string syntax 是kv键值对
# 使用df可以指定查询字段,不知道默认从所有字段查询
# sort 排序 也可以指定字段排序,如year:desc ,以年份降序
# form和size用于分页
# profile可以查看查询是如何被执行的
例子:响应内容太多,就不展示了,可以自己执行下面的查询来看响应 
# 指定查询 查询movies索引中year字段
GET /movies/_search?q=year:1995 
# 范查询 查询movies索引中所有字段
GET /movies/_search?q=1995 
# Term查询 查询year中包含1995或者2021的文档
GET /movies/_search?q=year:(1995 2021) 
# Term查询不加括号,表示查询year字段值含有1995,或者所有字段值包含2021的(2021是范查询)
GET /movies/_search?q=year:1995 2021 
# Phrase查询 查询year中含有1995且含有2021的文档
GET /movice/_search?q=year:"1995 2021"
# 范围查询 区间表示:[]闭区间  {}开区间
GET /movice/_search?q=year:[1995 TO 2021]
GET /movice/_search?q=year:{1995 TO 2021}
# 算数符号
GET /movice/_search?q=year:>1995
GET /movice/_search?q=year:(>1995 && <=2021)
# 通配符查询
GET /movice/_search?q=year:19?5 # ?表示一个字符
GET /movice/_search?q=year:19*5 # ?表示0或者多个字符
# 模糊匹配
GET /movice/_search?q=title:hvae~1 #会匹配到have 
# 近似查询
GET /movice/_search?q=title:Lord Rings~2 #会检索出Lord和Rings中间隔两个单词的文档
Request Body Search
# 1. 使用Elasticsearch提供的,基于JSON格式的更加完备的Query Domain Specific Language(DSL)
# 2. 一些高阶的查询只能通过Request Body来做,所以建议使用这种方式

例子:
# 分页 from0开始,默认返回10个结果,且获取靠后的翻页成本较高
POST /movies/_search 
{
  "from":10,
  "size":20,
  "query":{
    "match_all":{}
  }
}

# 排序,最好在数字和日期类型字段上排序
POST /movies/_search  
{  
  "sort":[{"order_date":"desc"}],
  "from":10,
  "size":20,
  "query":{
    "match_all":{}
  }
}

# 只返回部分字段,当字段较多时,可以选择只返回部分字段
POST /movies/_search  
{  
  "_source":["order_date","date"],
  "from":10,
  "size":20,
  "query":{
    "match_all":{}
  }
}
注意:_scoure支持通配符
_source["name*","desc*"]

批量查询 msearch
POST test/_msearch
{}
{"query":{"match_all":{}},"size":2}
{"index":"test2"}  # 指定另外的索引查询
{"query":{"match_all":{}},"size":1}

响应结果如下:

{
  "took" : 61,
  "responses" : [
    {
      "took" : 44,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "test",
            "_type" : "_doc",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "field1" : "value2"
            }
          }
        ]
      },
      "status" : 200
    },
    {
      "took" : 45,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 1,
          "relation" : "eq"
        },
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "test2",
            "_type" : "_doc",
            "_id" : "3",
            "_score" : 1.0,
            "_source" : {
              "field1" : "value3"
            }
          }
        ]
      },
      "status" : 200
    }
  ]
}

更多内容欢迎关注我的个人公众号“韩哥有话说”,100G人工智能学习资料,大量后端学习资料等你来拿。
qrcode_for_gh_3214f9e3470a_258.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值