阅读量:0
ES常用多条件查询
1. bool
查询
含义:使用 must
和 filter
条件,必须匹配 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
的值为 value1
或 field2
的值为 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
查询
含义:多字段匹配查询,field1
或 field2
的值为 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
的值为 value1
或 field2
的值为 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_type
且 field1
的值为 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_type
且 field1
的值为 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
的值为 value1
和 value2
,并且它们之间的距离不超过 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
的值为 value1
或 value2
的文档。
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" } } } }'