ES常用多条件查询

avatar
作者
筋斗云
阅读量:0

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"       }     }   } }' 

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!