Elasticsearch常用的查询条件

时间:2025-02-22 07:26:56

目录

1. Match Query

2. Term Query

3. Range Query

4. Bool Query

5. Exists Query

6. Prefix Query

7. Wildcard Query

8. Regexp Query

9. Terms Query

10. Nested Query

11. Geo Distance Query

12. Script Query

13. Fuzzy Query

14. Ids Query

15. More Like This Query

在Elasticsearch中,条件查询(也称为过滤查询)用于筛选文档。以下是一些常用的查询字段和查询类型:

1. Match Query

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

  • 示例:

    {
      "query": {
        "match": {
          "field_name": "search_text"
        }
      }
    }

2. Term Query

  • 用途: 用于精确匹配指定字段中的值,通常用于关键字字段(keyword)。

  • 示例:

    {
      "query": {
        "term": {
          "field_name": {
            "value": "exact_value"
          }
        }
      }
    }

3. Range Query

  • 用途: 用于匹配指定字段中的值在某个范围内的文档。

  • 示例:

    {
      "query": {
        "range": {
          "field_name": {
            "gte": 10,
            "lte": 20
          }
        }
      }
    }

4. Bool Query

  • 用途: 用于组合多个查询条件,支持mustshouldmust_notfilter

  • 示例:

    {
      "query": {
        "bool": {
          "must": [
            { "match": { "field1": "value1" } },
            { "range": { "field2": { "gte": 10 } } }
          ],
          "should": [
            { "term": { "field3": "value3" } }
          ],
          "must_not": [
            { "term": { "field4": "value4" } }
          ]
        }
      }
    }

5. Exists Query

  • 用途: 用于匹配指定字段存在的文档。

  • 示例:

    {
      "query": {
        "exists": {
          "field": "field_name"
        }
      }
    }

6. Prefix Query

  • 用途: 用于匹配指定字段中以特定前缀开头的文档。

  • 示例:

    {
      "query": {
        "prefix": {
          "field_name": {
            "value": "prefix_text"
          }
        }
      }
    }

7. Wildcard Query

  • 用途: 用于匹配指定字段中符合通配符模式的文档。

  • 示例:

    {
      "query": {
        "wildcard": {
          "field_name": {
            "value": "wild*card"
          }
        }
      }
    }

8. Regexp Query

  • 用途: 用于匹配指定字段中符合正则表达式的文档。

  • 示例:

    {
      "query": {
        "regexp": {
          "field_name": {
            "value": "regex_pattern"
          }
        }
      }
    }

9. Terms Query

  • 用途: 用于匹配指定字段中包含多个值中的任意一个的文档。

  • 示例:

    {
      "query": {
        "terms": {
          "field_name": ["value1", "value2", "value3"]
        }
      }
    }

10. Nested Query

  • 用途: 用于查询嵌套对象中的字段。

  • 示例:

    {
      "query": {
        "nested": {
          "path": "nested_field",
          "query": {
            "match": {
              "nested_field.sub_field": "value"
            }
          }
        }
      }
    }

11. Geo Distance Query

  • 用途: 用于查询地理位置字段,匹配距离某个点一定范围内的文档。

  • 示例:

    {
      "query": {
        "geo_distance": {
          "distance": "10km",
          "field_name": {
            "lat": 40.73,
            "lon": -74.1
          }
        }
      }
    }

12. Script Query

  • 用途: 使用脚本进行复杂的条件查询。

  • 示例:

    {
      "query": {
        "script": {
          "script": {
            "source": "doc['field_name'].value > params.value",
            "params": {
              "value": 10
            }
          }
        }
      }
    }

13. Fuzzy Query

  • 用途: 用于模糊匹配指定字段中的值。

  • 示例:

    {
      "query": {
        "fuzzy": {
          "field_name": {
            "value": "text",
            "fuzziness": "AUTO"
          }
        }
      }
    }

14. Ids Query

  • 用途: 用于根据文档ID查询文档。

  • 示例:

    {
      "query": {
        "ids": {
          "values": ["1", "2", "3"]
        }
      }
    }

15. More Like This Query

  • 用途: 用于查找与指定文档相似的文档。

  • 示例:

    {
      "query": {
        "more_like_this": {
          "fields": ["field1", "field2"],
          "like": [
            {
              "_index": "index_name",
              "_id": "1"
            }
          ]
        }
      }
    }