ES常用多条件查询

1. bool 查询

含义:使用 mustfilter 条件,必须匹配 field1 的值为 value1,并且 field2 的值为 value2
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "must": [
        { "match": { "field1": "value1" } }
      ],
      "filter": [
        { "term": { "field2": "value2" } }
      ]
    }
  }
}'

2. must_not 查询

含义:排除 field1 的值为 value1 的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "must_not": [
        { "term": { "field1": "value1" } }
      ]
    }
  }
}'

3. should 查询

含义:至少满足一个条件,field1 的值为 value1field2 的值为 value2
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "should": [
        { "term": { "field1": "value1" } },
        { "term": { "field2": "value2" } }
      ],
      "minimum_should_match": 1
    }
  }
}'

4. range 查询

含义:范围查询,field1 的值在 10 到 20 之间。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "range": {
      "field1": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}'

5. exists 查询

含义:查询 field1 存在的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "exists": {
      "field": "field1"
    }
  }
}'

6. prefix 查询

含义:前缀查询,field1 的值以 val 开头。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "prefix": {
      "field1": "val"
    }
  }
}'

7. wildcard 查询

含义:通配符查询,field1 的值以 val 开头。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "wildcard": {
      "field1": "val*"
    }
  }
}'

8. regexp 查询

含义:正则表达式查询,field1 的值匹配正则表达式 val.*
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "regexp": {
      "field1": "val.*"
    }
  }
}'

9. fuzzy 查询

含义:模糊查询,field1 的值接近 value1
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "fuzzy": {
      "field1": {
        "value": "value1",
        "fuzziness": "AUTO"
      }
    }
  }
}'

10. ids 查询

含义:ID 查询,查询 ID 为 1, 2, 3 的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "ids": {
      "values": ["1", "2", "3"]
    }
  }
}'

11. terms 查询

含义:多值匹配查询,field1 的值为 value1, value2, 或 value3
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "terms": {
      "field1": ["value1", "value2", "value3"]
    }
  }
}'

12. match 查询

含义:匹配查询,field1 的值为 value1
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {
      "field1": "value1"
    }
  }
}'

13. match_phrase 查询

含义:短语匹配查询,field1 的值为 value1 value2
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match_phrase": {
      "field1": "value1 value2"
    }
  }
}'

14. multi_match 查询

含义:多字段匹配查询,field1field2 的值为 value1
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "multi_match": {
      "query": "value1",
      "fields": ["field1", "field2"]
    }
  }
}'

15. constant_score 查询

含义:常量评分查询,field1 的值为 value1,并且提升评分为 1.2。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "constant_score": {
      "filter": {
        "term": { "field1": "value1" }
      },
      "boost": 1.2
    }
  }
}'

16. dis_max 查询

含义:不相交最大查询,field1 的值为 value1field2 的值为 value2,并且使用 tie_breaker 为 0.7。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "dis_max": {
      "queries": [
        { "term": { "field1": "value1" } },
        { "term": { "field2": "value2" } }
      ],
      "tie_breaker": 0.7
    }
  }
}'

17. function_score 查询

含义:函数评分查询,field1 的值为 value1,并且 field2 的值为 value2 时,权重为 2,评分模式为乘法。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "function_score": {
      "query": { "match": { "field1": "value1" } },
      "functions": [
        {
          "filter": { "term": { "field2": "value2" } },
          "weight": 2
        }
      ],
      "boost_mode": "multiply"
    }
  }
}'

18. nested 查询

含义:嵌套查询,nested_field.field1 的值为 value1
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "nested": {
      "path": "nested_field",
      "query": {
        "match": { "nested_field.field1": "value1" }
      }
    }
  }
}'

19. has_child 查询

含义:子文档查询,查询子文档类型为 child_typefield1 的值为 value1 的父文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "has_child": {
      "type": "child_type",
      "query": {
        "match": { "field1": "value1" }
      }
    }
  }
}'

20. has_parent 查询

含义:父文档查询,查询父文档类型为 parent_typefield1 的值为 value1 的子文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "has_parent": {
      "parent_type": "parent_type",
      "query": {
        "match": { "field1": "value1" }
      }
    }
  }
}'

21. geo_distance 查询

含义:地理距离查询,查询距离特定地理位置(lat, lon)在 200km 以内的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "geo_distance": {
      "distance": "200km",
      "location": {
        "lat": 40,
        "lon": -70
      }
    }
  }
}'

22. geo_bounding_box 查询

含义:地理边界框查询,查询在特定边界框内的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "geo_bounding_box": {
      "location": {
        "top_left": {
          "lat": 40.73,
          "lon": -74.1
        },
        "bottom_right": {
          "lat": 40.01,
          "lon": -71.12
        }
      }
    }
  }
}'

23. geo_polygon 查询

含义:地理多边形查询,查询在特定多边形内的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "geo_polygon": {
      "location": {
        "points": [
          { "lat": 40, "lon": -70 },
          { "lat": 30, "lon": -80 },
          { "lat": 20, "lon": -90 }
        ]
      }
    }
  }
}'

24. script 查询

含义:脚本查询,使用自定义脚本查询文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "script": {
      "script": {
        "source": "doc['field1'].value > params.value",
        "params": {
          "value": 5
        }
      }
    }
  }
}'

25. more_like_this 查询

含义:相似文档查询,查询与给定文本相似的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "more_like_this": {
      "fields": ["field1", "field2"],
      "like": "text to find similar documents",
      "min_term_freq": 1,
      "max_query_terms": 12
   好的,继续输出剩余的多条件查询操作。

### 25. `more_like_this` 查询

#### 含义:相似文档查询,查询与给定文本相似的文档。

```sh
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "more_like_this": {
      "fields": ["field1", "field2"],
      "like": "text to find similar documents",
      "min_term_freq": 1,
      "max_query_terms": 12
    }
  }
}'

26. percolate 查询

含义:预处理查询,查询与给定文档匹配的查询。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "percolate": {
      "field": "query",
      "document": {
        "field1": "value1",
        "field2": "value2"
      }
    }
  }
}'

27. span_term 查询

含义:跨度术语查询,查询 field1 的值为 value1 的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_term": {
      "field1": "value1"
    }
  }
}'

28. span_near 查询

含义:跨度邻近查询,查询 field1 的值为 value1value2,并且它们之间的距离不超过 5 个词。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_near": {
      "clauses": [
        { "span_term": { "field1": "value1" } },
        { "span_term": { "field1": "value2" } }
      ],
      "slop": 5,
      "in_order": true
    }
  }
}'

29. span_or 查询

含义:跨度或查询,查询 field1 的值为 value1value2 的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_or": {
      "clauses": [
        { "span_term": { "field1": "value1" } },
        { "span_term": { "field1": "value2" } }
      ]
    }
  }
}'

30. span_not 查询

含义:跨度非查询,查询 field1 的值为 value1,但不包含 value2 的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_not": {
      "include": { "span_term": { "field1": "value1" } },
      "exclude": { "span_term": { "field1": "value2" } }
    }
  }
}'

31. span_containing 查询

含义:跨度包含查询,查询包含 field1 的值为 value1 的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_containing": {
      "little": { "span_term": { "field1": "value1" } },
      "big": { "span_term": { "field2": "value2" } }
    }
  }
}'

32. span_within 查询

含义:跨度内查询,查询 field1 的值为 value1,并且在 field2 的值为 value2 的范围内。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_within": {
      "little": { "span_term": { "field1": "value1" } },
      "big": { "span_term": { "field2": "value2" } }
    }
  }
}'

33. span_first 查询

含义:跨度首查询,查询 field1 的值为 value1,并且在文档的前 3 个词内。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_first": {
      "match": { "span_term": { "field1": "value1" } },
      "end": 3
    }
  }
}'

34. exists 查询

含义:存在查询,查询 field1 存在的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "exists": {
      "field": "field1"
    }
  }
}'

35. prefix 查询

含义:前缀查询,查询 field1 的值以 value 为前缀的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "prefix": {
      "field1": "value"
    }
  }
}'

36. wildcard 查询

含义:通配符查询,查询 field1 的值匹配 val* 的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "wildcard": {
      "field1": "val*"
    }
  }
}'

37. regexp 查询

含义:正则表达式查询,查询 field1 的值匹配正则表达式 value.* 的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "regexp": {
      "field1": "value.*"
    }
  }
}'

38. fuzzy 查询

含义:模糊查询,查询 field1 的值为 value1,允许有编辑距离为 2 的模糊匹配。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "fuzzy": {
      "field1": {
        "value": "value1",
        "fuzziness": 2
      }
    }
  }
}'

39. type 查询

含义:类型查询,查询文档类型为 type1 的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "type": {
      "value": "type1"
    }
  }
}'

40. terms_set 查询

含义:术语集查询,查询 field1 的值包含在给定的术语集中的文档。
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "terms_set": {
      "field1": {
        "terms": ["value1", "value2", "value3"],
        "minimum_should_match_field": "required_matches"
      }
    }
  }
}'

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部