自学内容网 自学内容网

ES里面常用的查询语句有哪些?

【编程电子书大全】链接: https://pan.baidu.com/s/1yhPJ9LmS_z5TdgIgxs9NvQ?pwd=yyds > 提取码: yyds

Elasticsearch(ES)中常用的查询语句包括以下几类:

1. Match 查询

用于全文搜索,匹配指定字段中的文本。

GET /index_name/_search
{
  "query": {
    "match": {
      "field": "value"
    }
  }
}

2. Term 查询

用于精确匹配,不会进行分词。

GET /index_name/_search
{
  "query": {
    "term": {
      "field": "value"
    }
  }
}

3. Range 查询

用于范围查询,如日期、数字范围。

GET /index_name/_search
{
  "query": {
    "range": {
      "field": {
        "gte": "value1",
        "lte": "value2"
      }
    }
  }
}

4. Bool 查询

用于组合多个查询条件,可以包含 mustshouldmust_notfilter 子句。

GET /index_name/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "field1": "value1" } }
      ],
      "filter": [
        { "term": { "field2": "value2" } }
      ],
      "must_not": [
        { "term": { "field3": "value3" } }
      ],
      "should": [
        { "match": { "field4": "value4" } }
      ]
    }
  }
}

5. Match Phrase 查询

用于短语匹配,要求完全匹配短语中的词序。

GET /index_name/_search
{
  "query": {
    "match_phrase": {
      "field": "exact phrase"
    }
  }
}

6. Multi-Match 查询

在多个字段上进行匹配。

GET /index_name/_search
{
  "query": {
    "multi_match": {
      "query": "value",
      "fields": ["field1", "field2"]
    }
  }
}

7. Wildcard 查询

用于通配符查询,支持 *? 通配符。

GET /index_name/_search
{
  "query": {
    "wildcard": {
      "field": "val*"
    }
  }
}

8. Exists 查询

用于检查文档中是否存在某个字段。

GET /index_name/_search
{
  "query": {
    "exists": {
      "field": "field_name"
    }
  }
}

9. Aggregation 查询

用于统计和聚合分析。

GET /index_name/_search
{
  "aggs": {
    "aggregation_name": {
      "terms": {
        "field": "field_name"
      }
    }
  }
}

这些查询语句涵盖了大多数常见的 Elasticsearch 查询需求,根据具体应用场景可以组合使用以实现复杂的查询逻辑。

其中Bool的四种子句的含义如下

在 Elasticsearch 中,bool 查询用于将多个查询子句组合在一起。它包含四种不同的子句,每种子句的作用和使用场景不同:

1. must

  • 作用:必须匹配的条件,类似于逻辑上的 AND。
  • 特性:文档必须满足 must 子句中的所有条件才能被返回。
  • 示例
    "must": [
      { "match": { "field1": "value1" } },
      { "term": { "field2": "value2" } }
    ]
    

2. should

  • 作用:可选匹配的条件,类似于逻辑上的 OR。
  • 特性:如果有一个或多个 should 子句,则文档满足其中任意一个条件即可被返回。如果没有 must 子句,至少一个 should 条件必须匹配才能返回文档。
  • 示例
    "should": [
      { "match": { "field3": "value3" } },
      { "term": { "field4": "value4" } }
    ]
    

3. must_not

  • 作用:必须不匹配的条件,类似于逻辑上的 NOT。
  • 特性:文档不能满足 must_not 子句中的任何一个条件,否则不会被返回。
  • 示例
    "must_not": [
      { "match": { "field5": "value5" } },
      { "term": { "field6": "value6" } }
    ]
    

4. filter

  • 作用:过滤条件,不影响评分。
  • 特性:文档必须满足 filter 子句中的所有条件,但这些条件不会影响文档的相关性评分,因此性能较高。
  • 示例
    "filter": [
      { "term": { "field7": "value7" } },
      { "range": { "field8": { "gte": 10, "lte": 20 } } }
    ]
    

综合示例

GET /index_name/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } }
      ],
      "should": [
        { "match": { "tags": "search" } },
        { "match": { "tags": "analytics" } }
      ],
      "must_not": [
        { "term": { "status": "deprecated" } }
      ],
      "filter": [
        { "term": { "author": "john_doe" } },
        { "range": { "publish_date": { "gte": "2020-01-01" } } }
      ]
    }
  }
}

在这个例子中,查询的意思是:

  • 文档必须包含 title 字段匹配 “Elasticsearch”。
  • 文档可以包含 tags 字段匹配 “search” 或 “analytics”。
  • 文档不能包含 status 字段为 “deprecated”。
  • 文档必须包含 author 字段为 “john_doe” 且 publish_date 字段在 2020-01-01 之后。

通过这种方式,可以灵活组合不同的条件来构建复杂的查询逻辑。


原文地址:https://blog.csdn.net/chaogu94/article/details/140717532

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!