当前位置:   article > 正文

ElasticSearch~查询操作~(简单查询、批量查询、匹配查询、模糊查询、精确查询、范围查询、通配符查询、must查询、should查询、过滤查询)_dsl must多个字段查询

dsl must多个字段查询

一、简单查询

一、查询所有结果

GET /student_info/_search
{
  "query": {"match_all": {}}
}
  • 1
  • 2
  • 3
  • 4

二、根据条件查询

GET /student_info/_search
{
  "query":{
    "match":{
      "name":"张三"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

三、排序

GET /student_info/_search
{
  "query":{
    "match":{
      "name":"张三"
    }
  },
  "sort":[{
    "age":"desc"
  }]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

GET /student_info/_search
{
  "query":{"match_all": {}},
  "_source": ["name","age"]
}
  • 1
  • 2
  • 3
  • 4
  • 5

二、批量查询

一、多ID查询

GET /student_info/_search
{
  "query":{
    "ids":{
      "values":[11001,11002,11003]
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

二、单索引批量查询

POST /student_info/_mget
{
  "ids":["11001","11002","11003"]
}
  • 1
  • 2
  • 3
  • 4

三、跨索引批量查询

GET /_mget
{
  "docs":[
      {
        "_index":"student_info",
        "_id":"11001"
      },
      {
        "_index":"teacher",
        "_id":"1001"
      }
    ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

四、跨索引批量查询

GET /_msearch
{"index":"student_info"}
{"query":{"match_all":{}},"from":0,"size":4}
{"index":"teacher"}
{"query":{"match_all":{}}}
  • 1
  • 2
  • 3
  • 4
  • 5

三、匹配查询

一、关键词分词查询

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

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

GET /student_info/_search
{
  "query":{
    "match":{
      "profession":"计算机技术"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
GET /student_info/_search
{
  "query":{
    "match":{
      "profession":"计算机酒店"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

二、关联查询

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

GET /student_info/_search
{
  "query":{
    "match":{
      "profession": {
        "query":"计算机技术",
        "operator": "and"
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

GET /student_info/_search
{
  "query": {
    "match":{
      "profession": {
        "query": "计算机酒店",
        "operator": "or"
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

三、多字段查询

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

GET /student_info/_search
{
  "query":{
    "multi_match": {
      "query": "我计算机技术",
      "fields": ["profession","desc"]
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

四、短语查询

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

GET /student_info/_search
{
  "query": {
    "match_phrase": {
      "profession": "计算机科"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

五、高亮搜索

  • 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":{}
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

六、前缀匹配

GET /student_info/_search
{
  "query": {
    "match_phrase_prefix": {
      "name":"小小"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

四、模糊查询

GET /student_info/_search
{
  "query":{
    "fuzzy":{
      "name":"张"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

五、精确查询

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

  • term 精确查找(单个)
  • terms 精确查找(多个)
GET /student_info/_search
{
  "query":{
    "term":{
      "name.keyword": "张三"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

GET /student_info/_search
{
  "query": {
    "terms":{
      "age":[19,20,21,22]
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

六、范围查询

一、range

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

  • 数字范围
GET /student_info/_search
{
  "query": {
    "range":{
      "age":{
        "gte":19,
        "lte":21
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 时间范围
GET /student_info/_search
{
  "query": {
    "range":{
      "birthday": {
        "gte": "2001-06-15",
        "lte": "2001-09-20"
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

二、from…to

  • 范围查询包含边界
GET /student_info/_search
{
  "query":{
    "range":{
      "age":{
        "from":19,
        "to":21
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 范围查询不包含边界
GET /student_info/_search
{
  "query": {
    "range":{
      "age":{
        "from":19,
        "to":21,
        "include_lower":false,
        "include_upper":false
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

七、通配符查询

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

GET /student_info/_search
{
  "query":{
    "wildcard":{
      "english_name": "xiaoxiao*"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
GET /student_info/_search
{
  "query":{
    "wildcard": {
      "english_name": "li?i"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

八、must查询

  • must的多条件都必须满足

  • must相当于MySQL条件中的AND

GET /student_info/_search
{
  "query":{
    "bool":{
      "must":[{
        "match":{
          "name":"小小"
        }
      },
      {
        "range":{
          "age":{
            "gt":19,
            "lte":22
          }
        }
      }
      ]
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

九、should查询

  • should的条件,至少满足一个就可以
  • should相当于MySQL条件中的OR
GET /student_info/_search
{
  "query":{
    "bool":{
      "should":[{
        "match":{
          "name":"小小"
        }
      },
      {
        "range":{
          "age":{
            "gt":19,
            "lte":22
          }
        }
      }]
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

十、过滤查询

GET /student_info/_search
{
  "query":{
    "bool":{
      "should":[
        {
          "match":{
            "name":"小小"
          }
        }],
        "filter":{
          "range":{
            "age":{
              "gt":21,
              "lte":22
            }
          }
        }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/708421
推荐阅读
相关标签
  

闽ICP备14008679号