ElasticSearch使用Search API

本文深入探讨ElasticSearch中的高级查询技术,包括URI查询、RequestBody查询、脚本字段使用及各种查询类型如Match、MatchPhrase和QueryStringQuery的运用。通过实例解析,帮助读者掌握高效查询方法。

ElasticSearch使用Search API

  • URI Search : 在URI中使用查询参数
  • Request Body Search:使用ElasticSearch 提供的,基于JSON格式更加完备的Query Domain Specific Lannguage (DSL)

指定查询的索引

语法范围
/_search集群上所有的索引
/index1/_searchindex1
/index1,index2/_searchindex1和index2
/index*/_search以index开头的索引
  • URI查询

    • 使用q 指定查询字符串 ,使用KV键值对形式
      • 指定字段 v.s 泛查询
        • 指定字段: q=title:2012
        • 泛查询:q=2012 查询所有字段
      • Term v.s Phrase
        • Term 查询:Natural Born Killers 等效于 Natural OR Born OR Killers
        • Phrase 查询:“Natural Born Killers” 等效于 Natural AND Born AND Killers。Phrase 查询还要求前后顺序保持一致
      • 分组与引号
        • title:(Natural AND Born)
        • title=“Natural Born”
      • 布尔操作
        • AND / OR / NOT 或者 && / || / ! (AND : 条件全满足;OR : 条件至少满足其一;NOT : 条件必须不满足 )
        • (必须大写 eg:title:(matrix NOT reloaded))
      • 分组
        • + 表示 must
        • - 表示 must_not
        • title:(+matrix -reloaded)
      • 范围查询
        • 区间表示:[] 闭区间,{} 开区间
        • year:{2019 TO 2018} year:[* TO 2018]
      • 算术符号
        • year:>2010
        • year:(>2010 && <=2018)
        • year:(+>2010 +<=2)
      • 通配符查询(通配符查询效率低,占用内存大,不建议使用,特别是放在最前面)
        • ? 代表一个字符,* 代表 0 或多个字符
        • title:mi?d
        • title:bea*
      • 正则表达
        • title:[bt]oy
      • 模糊匹配与近似查询
        • title:befutifl~1
        • title:“lord rings”~2
    • df 默认字段,不指定时,会对所有的字段进行查询
    • sort 排序 fromsize 用于分页
    • profile 可以查询是如何被执行的
    GET movies/_search?q=2012&df=title&sort=year:desc&from=0&size=3&timeout=1s
    {
      "profile":"true"
    }
    

    查询movies 索引里,title=2012,查询限制超时1秒。查询结果根据year倒序,从0开始,取3条数据,并查看查询如何被执行的

    GET movies/_search?q=title:"Natural Born Killers"
    

    q用来表示查询内容
    搜索 title 存在Natural 或者 Born 或者 Killers的文档

    • 搜索Response
      -在这里插入图片描述
  • Request Body查询

    • 将查询语句通过HTTP Request Body 发送给ElasticSearch
    POST movies/_search		# GET POST 都可以
    {
      "sort":[{"year":"desc"}]
      "from":10,
      "size":5,
      "_source":["需要的字段1","需要的字段2","day*(支持通配符)"]
      "query":{					# 查询
        "match_all": {}			# 返回所有的文档,默认10条
      }
    }
    
    • 脚本字段

      返回新字段(例如对结果字段进行拼接,计算等)

      GET movies/_search
      {
        "script_fields": {
          "new_year": {		# 新的字段名	
            "script": {
              "lang":"painless",
              "source":"doc['year'].value + '_年'"
            }
          }
        },
        "_source":["year","title"],
        "query":{
          "match_all":{}
        }
      }
      
    • 使用查询表达式 - Match

      GET movies/_search
      {
        "query":{
          "match":{
            "title":"Natural Born Killers" 
          }
        }
      }
      

      ​ 查询 title 包含Natural or Born or Killers 的文档

      GET movies/_search
      {
        "query":{
          "match":{
            "title":{
              "query":"Natural Born Killers" ,
              "operator":"AND"
            }
          }
        }
      }
      
    • 或者使用 match_phrase 查询

      GET movies/_search
      {
        "query":{
          "match_phrase":{
            "title":{
              "query":"Natural Born Killers"
            }
          }
        }
      }
      

      都可以查询 title 包含 “Natural Born Killers” 的文档

    • 使用 Query Sting Query

      POST movies/_search
      {
        "query":{
          "query_string":{
            "default_field": "title",
            "query":"Natural AND Born"
          }
        }
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值