ElasticSearch的查询语法

原文内容

一、简单查询

一、查询所有结果

GET /student_info/_search
{
  "query": {"match_all": {}}
}

二、根据条件查询

GET /student_info/_search
{
  "query":{
    "match":{
      "name":"张三"
    }
  }
}

三、排序

GET /student_info/_search
{
  "query":{
    "match":{
      "name":"张三"
    }
  },
  "sort":[{
    "age":"desc"
  }]
}

四、指定查询返回结果字段

GET /student_info/_search
{
  "query":{"match_all": {}},
  "_source": ["name","age"]
}

二、批量查询

一、多ID查询

GET /student_info/_search
{
  "query":{
    "ids":{
      "values":[11001,11002,11003]
    }
  }
}

二、单索引批量查询

POST /student_info/_mget
{
  "ids":["11001","11002","11003"]
}

三、跨索引批量查询

GET /_mget
{
  "docs":[
      {
        "_index":"student_info",
        "_id":"11001"
      },
      {
        "_index":"teacher",
        "_id":"1001"
      }
    ]
}

四、跨索引批量查询

GET /_msearch
{"index":"student_info"}
{"query":{"match_all":{}},"from":0,"size":4}
{"index":"teacher"}
{"query":{"match_all":{}}}

三、匹配查询

一、关键词分词查询

先对match里面的字段值进行分词,然后进行查询

“profession”: “计算机技术” :分词结果为 “计算机”、 “技术”,查询profession包含 "计算机"和 "技术"的记录

GET /student_info/_search
{
  "query":{
    "match":{
      "profession":"计算机技术"
    }
  }
}
GET /student_info/_search
{
  "query":{
    "match":{
      "profession":"计算机酒店"
    }
  }
}

二、关联查询

“profession”: “计算机技术” :分词结果为 “计算机”、 “技术”,查询条件"operator": “and”,必须满足全部分词结果。

GET /student_info/_search
{
  "query":{
    "match":{
      "profession": {
        "query":"计算机技术",
        "operator": "and"
      }
    }
  }
}

“profession”: “计算机技术” :分词结果为 “计算机”、 “技术”,查询条件"operator": “or”,任意满足其一。

GET /student_info/_search
{
  "query": {
    "match":{
      "profession": {
        "query": "计算机酒店",
        "operator": "or"
      }
    }
  }
}

三、多字段查询

检索内容"我计算机技术" , 会拆词为“我”,“计算机”,“技术”匹配字段profession或desc字段中包含拆出来的词语的结果

GET /student_info/_search
{
  "query":{
    "multi_match": {
      "query": "我计算机技术",
      "fields": ["profession","desc"]
    }
  }
}

四、短语查询

match_phrase短语搜索,要求所有的分词必须同时出现在文档中,同时位置必须紧邻一致。

GET /student_info/_search
{
  "query": {
    "match_phrase": {
      "profession": "计算机科"
    }
  }
}

五、高亮搜索

  • highlight 高亮查找

  • pre_tags 标签前缀

  • post_tags 标签后缀

  • fields 规定的字段,支持多个

  • 注意:如果不声明前缀和后缀,那边默认使用 <em></em>

GET /student_info/_search
{
  "query":{
    "match":{
      "name":"张三"
    }
  },
  "highlight": {
    "pre_tags":"<p class = \"text_high_light\">",
    "post_tags": "</p>",
    "fields": {
      "name":{}
    }
  }
}

六、前缀匹配

GET /student_info/_search
{
  "query": {
    "match_phrase_prefix": {
      "name":"小小"
    }
  }
}

四、模糊查询

GET /student_info/_search
{
  "query":{
    "fuzzy":{
      "name":"张"
    }
  }
}

五、精确查询

term是关键词查询,参数类型type 一般都是是keyword , 精确查询,对查询的值不分词,直接进倒排索引去匹配。

  • term 精确查找(单个)
  • terms 精确查找(多个)
GET /student_info/_search
{
  "query":{
    "term":{
      "name.keyword": "张三"
    }
  }
}

terms表示多条件并列,用大括号 [ ] 涵盖所查内容,类似于MySql中in方法

GET /student_info/_search
{
  "query": {
    "terms":{
      "age":[19,20,21,22]
    }
  }
}

六、范围查询

一、range

大于-gt,小于-lt,大于等于-gte,小于等于-lte

  • 数字范围
GET /student_info/_search
{
  "query": {
    "range":{
      "age":{
        "gte":19,
        "lte":21
      }
    }
  }
}
  • 时间范围
GET /student_info/_search
{
  "query": {
    "range":{
      "birthday": {
        "gte": "2001-06-15",
        "lte": "2001-09-20"
      }
    }
  }
}

二、from…to

  • 范围查询包含边界
GET /student_info/_search
{
  "query":{
    "range":{
      "age":{
        "from":19,
        "to":21
      }
    }
  }
}
  • 范围查询不包含边界
GET /student_info/_search
{
  "query": {
    "range":{
      "age":{
        "from":19,
        "to":21,
        "include_lower":false,
        "include_upper":false
      }
    }
  }
}

七、通配符查询

注:?用来匹配任意字符,*用来匹配零个或者多个字符,主要用于-英文检索

GET /student_info/_search
{
  "query":{
    "wildcard":{
      "english_name": "xiaoxiao*"
    }
  }
}
GET /student_info/_search
{
  "query":{
    "wildcard": {
      "english_name": "li?i"
    }
  }
}

八、must查询

  • must的多条件都必须满足

  • must相当于MySQL条件中的AND

GET /student_info/_search
{
  "query":{
    "bool":{
      "must":[{
        "match":{
          "name":"小小"
        }
      },
      {
        "range":{
          "age":{
            "gt":19,
            "lte":22
          }
        }
      }
      ]
    }
  }
}

九、should查询

  • should的条件,至少满足一个就可以
  • should相当于MySQL条件中的OR
GET /student_info/_search
{
  "query":{
    "bool":{
      "should":[{
        "match":{
          "name":"小小"
        }
      },
      {
        "range":{
          "age":{
            "gt":19,
            "lte":22
          }
        }
      }]
    }
  }
}

十、过滤查询

GET /student_info/_search
{
  "query":{
    "bool":{
      "should":[
        {
          "match":{
            "name":"小小"
          }
        }],
        "filter":{
          "range":{
            "age":{
              "gt":21,
              "lte":22
            }
          }
        }
    }
  }
}
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值