【ES常用查询操作】

【ES常用查询操作】query 在这个示例中 查询将匹配 field1 的值大于 10 的文档

大家好,欢迎来到IT知识分享网。

在 Elasticsearch (ES) 中,多条件检索可以通过组合多个查询条件来实现。Elasticsearch 提供了多种查询类型和组合方式,常见的有 bool 查询、mustshouldmust_notfilter 等。以下是一些常见的多条件检索示例。

1. 使用 bool 查询

bool 查询允许你组合多个查询条件,并指定它们之间的逻辑关系。

示例:必须匹配 field1field2,并且可以选择性匹配 field3
{ 
    "query": { 
    "bool": { 
    "must": [ { 
    "match": { 
    "field1": "value1" } }, { 
    "match": { 
    "field2": "value2" } } ], "should": [ { 
    "match": { 
    "field3": "value3" } } ], "minimum_should_match": 1 } } } 

在这个示例中,文档必须匹配 field1field2,并且至少匹配 field3 中的一个条件。

2. 使用 filter 查询

filter 查询用于过滤文档,不计算相关性评分,通常用于结构化数据查询。

示例:必须匹配 field1field2,并且过滤 field4
{ 
    "query": { 
    "bool": { 
    "must": [ { 
    "match": { 
    "field1": "value1" } }, { 
    "match": { 
    "field2": "value2" } } ], "filter": [ { 
    "term": { 
    "field4": "value4" } } ] } } } 

在这个示例中,文档必须匹配 field1field2,并且 field4 必须等于 value4

3. 使用 must_not 查询

must_not 查询用于排除匹配特定条件的文档。

示例:必须匹配 field1,但不能匹配 field2
{ 
    "query": { 
    "bool": { 
    "must": [ { 
    "match": { 
    "field1": "value1" } } ], "must_not": [ { 
    "match": { 
    "field2": "value2" } } ] } } } 

在这个示例中,文档必须匹配 field1,但不能匹配 field2

4. 组合查询示例

示例:复杂组合查询
{ 
    "query": { 
    "bool": { 
    "must": [ { 
    "match": { 
    "field1": "value1" } }, { 
    "range": { 
    "field2": { 
    "gte": 10, "lte": 20 } } } ], "should": [ { 
    "match": { 
    "field3": "value3" } }, { 
    "term": { 
    "field4": "value4" } } ], "must_not": [ { 
    "term": { 
    "field5": "value5" } } ], "filter": [ { 
    "term": { 
    "field6": "value6" } } ], "minimum_should_match": 1 } } } 

在这个示例中:

  • 文档必须匹配 field1field2 的范围条件。
  • 文档应该匹配 field3field4 中的一个条件。
  • 文档不能匹配 field5
  • 文档必须匹配 field6

5. 使用 multi_match 查询

multi_match 查询允许你在多个字段中搜索相同的关键词。

示例:在 field1field2 中搜索 value
{ 
    "query": { 
    "multi_match": { 
    "query": "value", "fields": ["field1", "field2"] } } } 

在这个示例中,Elasticsearch 将在 field1field2 中搜索 value

6. 使用 nested 查询

如果你的文档包含嵌套对象,可以使用 nested 查询。

示例:嵌套查询

假设你的文档结构如下:

{ 
    "name": "John", "address": { 
    "city": "New York", "zipcode": "10001" } } 

你可以使用 nested 查询来检索嵌套对象中的字段。

示例:嵌套查询
{ 
    "query": { 
    "nested": { 
    "path": "address", "query": { 
    "bool": { 
    "must": [ { 
    "match": { 
    "address.city": "New York" } }, { 
    "match": { 
    "address.zipcode": "10001" } } ] } } } } } 

在这个示例中,查询将检索 address 对象中的 cityzipcode 字段。

7. 使用 terms 查询

terms 查询允许你匹配多个值中的任意一个。

示例:匹配 field1 中的多个值
{ 
    "query": { 
    "terms": { 
    "field1": ["value1", "value2", "value3"] } } } 

在这个示例中,查询将匹配 field1 中的任意一个值:value1value2value3

8. 使用 range 查询

range 查询允许你匹配数值、日期或字符串范围。

示例:匹配 field1 的范围
{ 
    "query": { 
    "range": { 
    "field1": { 
    "gte": 10, "lte": 20 } } } } 

在这个示例中,查询将匹配 field1 的值在 10 到 20 之间的文档。

9. 使用 exists 查询

exists 查询用于匹配包含特定字段的文档。

示例:匹配包含 field1 的文档
{ 
    "query": { 
    "exists": { 
    "field": "field1" } } } 

在这个示例中,查询将匹配所有包含 field1 字段的文档。

10. 使用 wildcard 查询

wildcard 查询允许你使用通配符进行模式匹配。

示例:匹配 field1 中的模式
{ 
    "query": { 
    "wildcard": { 
    "field1": "val*" } } } 

在这个示例中,查询将匹配 field1 中以 val 开头的所有值。

11. 使用 prefix 查询

prefix 查询用于匹配以特定前缀开头的字段值。

示例:匹配 field1 中的前缀
{ 
    "query": { 
    "prefix": { 
    "field1": "val" } } } 

在这个示例中,查询将匹配 field1 中以 val 开头的所有值。

12. 使用 fuzzy 查询

fuzzy 查询用于模糊匹配,允许一定程度的拼写错误。

示例:模糊匹配 field1
{ 
    "query": { 
    "fuzzy": { 
    "field1": "value" } } } 

在这个示例中,查询将模糊匹配 field1 中接近 value 的所有值。

13. 使用 regexp 查询

regexp 查询允许你使用正则表达式进行模式匹配。

示例:正则表达式匹配 field1
{ 
    "query": { 
    "regexp": { 
    "field1": "val.*" } } } 

在这个示例中,查询将匹配 field1 中符合正则表达式 val.* 的所有值。

14. 使用 script 查询

script 查询允许你使用脚本进行复杂的条件匹配。

示例:使用脚本查询
{ 
    "query": { 
    "script": { 
    "script": { 
    "source": "doc['field1'].value > params.value", "params": { 
    "value": 10 } } } } } 

在这个示例中,查询将匹配 field1 的值大于 10 的文档。

15. 使用 match_phrase 查询

match_phrase 查询用于匹配包含特定短语的文档。

示例:匹配 field1 中的短语
{ 
    "query": { 
    "match_phrase": { 
    "field1": "quick brown fox" } } } 

在这个示例中,查询将匹配 field1 中包含短语 “quick brown fox” 的文档。

16. 使用 match_phrase_prefix 查询

match_phrase_prefix 查询用于匹配以特定短语前缀开头的文档。

示例:匹配 field1 中的短语前缀
{ 
    "query": { 
    "match_phrase_prefix": { 
    "field1": "quick brown" } } } 

在这个示例中,查询将匹配 field1 中以 “quick brown” 开头的短语。

17. 使用 geo_distance 查询

geo_distance 查询用于匹配在特定地理距离内的文档。

示例:匹配在特定地理距离内的文档
{ 
    "query": { 
    "geo_distance": { 
    "distance": "200km", "location": { 
    "lat": 40.7128, "lon": -74.0060 } } } } 

在这个示例中,查询将匹配在距离 (40.7128, -74.0060) 200 公里范围内的文档。

18. 使用 geo_bounding_box 查询

geo_bounding_box 查询用于匹配在特定地理边界框内的文档。

示例:匹配在特定地理边界框内的文档
{ 
    "query": { 
    "geo_bounding_box": { 
    "location": { 
    "top_left": { 
    "lat": 40.73, "lon": -74.1 }, "bottom_right": { 
    "lat": 40.01, "lon": -71.12 } } } } } 

在这个示例中,查询将匹配在指定地理边界框内的文档。

19. 使用 geo_polygon 查询

geo_polygon 查询用于匹配在特定地理多边形内的文档。

示例:匹配在特定地理多边形内的文档
{ 
    "query": { 
    "geo_polygon": { 
    "location": { 
    "points": [ { 
    "lat": 40.73, "lon": -74.1 }, { 
    "lat": 40.01, "lon": -71.12 }, { 
    "lat": 40.73, "lon": -71.12 } ] } } } } 

在这个示例中,查询将匹配在指定地理多边形内的文档。

20. 使用 more_like_this 查询

more_like_this 查询用于查找与给定文档相似的文档。

示例:查找与给定文档相似的文档
{ 
    "query": { 
    "more_like_this": { 
    "fields": ["field1", "field2"], "like": "text to find similar documents", "min_term_freq": 1, "max_query_terms": 12 } } } 

在这个示例中,查询将查找与给定文本相似的文档。

21. 使用 ids 查询

ids 查询用于根据文档 ID 匹配文档。

示例:根据文档 ID 匹配文档
{ 
    "query": { 
    "ids": { 
    "values": ["1", "2", "3"] } } } 

在这个示例中,查询将匹配 ID 为 123 的文档。

22. 使用 constant_score 查询

constant_score 查询用于将查询的相关性评分设置为常量值。

示例:将查询的相关性评分设置为常量值
{ 
    "query": { 
    "constant_score": { 
    "filter": { 
    "term": { 
    "field1": "value1" } }, "boost": 1.2 } } } 

在这个示例中,查询将匹配 field1value1 的文档,并将相关性评分设置为常量值 1.2

23. 使用 function_score 查询

function_score 查询允许你根据特定函数调整文档的相关性评分。

示例:根据特定函数调整相关性评分
{ 
    "query": { 
    "function_score": { 
    "query": { 
    "match": { 
    "field1": "value1" } }, "functions": [ { 
    "filter": { 
    "match": { 
    "field2": "value2" } }, "weight": 2 }, { 
    "filter": { 
    "range": { 
    "field3": { 
    "gte": 10 } } }, "weight": 1.5 } ], "boost_mode": "multiply" } } } 

在这个示例中,查询将首先匹配 field1value1 的文档,然后根据 field2field3 的条件调整相关性评分。

24. 使用 dis_max 查询

dis_max 查询用于组合多个查询,并返回得分最高的文档。

示例:组合多个查询并返回得分最高的文档
{ 
    "query": { 
    "dis_max": { 
    "queries": [ { 
    "match": { 
    "field1": "value1" } }, { 
    "match": { 
    "field2": "value2" } } ], "tie_breaker": 0.7 } } } 

在这个示例中,查询将组合 field1field2 的匹配条件,并返回得分最高的文档。

25. 使用 boosting 查询

boosting 查询用于提升某些查询的得分,同时降低其他查询的得分。

示例:提升和降低特定查询的得分
{ 
    "query": { 
    "boosting": { 
    "positive": { 
    "match": { 
    "field1": "value1" } }, "negative": { 
    "match": { 
    "field2": "value2" } }, "negative_boost": 0.2 } } } 

在这个示例中,查询将提升 field1value1 的文档的得分,同时降低 field2value2 的文档的得分。

26. 使用 script_score 查询

script_score 查询允许你使用脚本计算文档的相关性评分。

示例:使用脚本计算相关性评分
{ 
    "query": { 
    "script_score": { 
    "query": { 
    "match": { 
    "field1": "value1" } }, "script": { 
    "source": "doc['field2'].value * params.factor", "params": { 
    "factor": 1.5 } } } } } 

在这个示例中,查询将首先匹配 field1value1 的文档,然后使用脚本计算相关性评分。

27. 使用 highlight 查询

highlight 查询用于在查询结果中高亮显示匹配的部分。

示例:高亮显示匹配的部分
{ 
    "query": { 
    "match": { 
    "field1": "value1" } }, "highlight": { 
    "fields": { 
    "field1": { 
   } } } } 

在这个示例中,查询将匹配 field1value1 的文档,并在结果中高亮显示匹配的部分。

28. 使用 rescore 查询

rescore 查询用于对初始查询结果进行重新评分。

示例:对初始查询结果进行重新评分
{ 
    "query": { 
    "match": { 
    "field1": "value1" } }, "rescore": { 
    "window_size": 50, "query": { 
    "rescore_query": { 
    "match_phrase": { 
    "field1": "value1" } }, "query_weight": 0.7, "rescore_query_weight": 1.2 } } } 

在这个示例中,查询将首先匹配 field1value1 的文档,然后在前 50 个结果中使用 match_phrase 查询进行重新评分。

29. 使用 percolate 查询

percolate 查询用于查找与特定文档匹配的查询。

示例:查找与特定文档匹配的查询
{ 
    "query": { 
    "percolate": { 
    "field": "query", "document": { 
    "field1": "value1" } } } } 

在这个示例中,查询将查找与文档 {"field1": "value1"} 匹配的查询。

30. 使用 parent_id 查询

parent_id 查询用于查找具有特定父文档 ID 的子文档。

示例:查找具有特定父文档 ID 的子文档
{ 
    "query": { 
    "parent_id": { 
    "type": "child_type", "id": "parent_id_value" } } } 

在这个示例中,查询将查找父文档 ID 为 parent_id_value 的子文档。

31. 使用 has_child 查询

has_child 查询用于查找具有特定子文档的父文档。

示例:查找具有特定子文档的父文档
{ 
    "query": { 
    "has_child": { 
    "type": "child_type", "query": { 
    "match": { 
    "field1": "value1" } } } } } 

在这个示例中,查询将查找具有 field1value1 的子文档的父文档。

32. 使用 has_parent 查询

has_parent 查询用于查找具有特定父文档的子文档。

示例:查找具有特定父文档的子文档
{ 
    "query": { 
    "has_parent": { 
    "parent_type": "parent_type", "query": { 
    "match": { 
    "field1": "value1" } } } } } 

在这个示例中,查询将查找具有 field1value1 的父文档的子文档。

33. 使用 terms_set 查询

terms_set 查询用于匹配字段值与查询中的多个值集合的交集。

示例:匹配字段值与查询中的多个值集合的交集
{ 
    "query": { 
    "terms_set": { 
    "field1": { 
    "terms": ["value1", "value2", "value3"], "minimum_should_match_field": "required_matches" } } } } 

在这个示例中,查询将匹配 field1 的值与 ["value1", "value2", "value3"] 集合的交集,并且交集的大小由 required_matches 字段指定。

34. 使用 intervals 查询

intervals 查询用于基于间隔匹配文本。

示例:基于间隔匹配文本
{ 
    "query": { 
    "intervals": { 
    "field1": { 
    "all_of": { 
    "intervals": [ { 
    "match": { 
    "query": "value1" } }, { 
    "match": { 
    "query": "value2" } } ], "max_gaps": 5, "ordered": true } } } } } 

在这个示例中,查询将匹配 field1 中包含 value1value2,并且它们之间的最大间隔为 5 且顺序一致的文档。

35. 使用 rank_feature 查询

rank_feature 查询用于基于特征字段的值对文档进行排名。

示例:基于特征字段的值对文档进行排名
{ 
    "query": { 
    "rank_feature": { 
    "field": "feature_field", "boost": 1.5 } } } 

在这个示例中,查询将基于 feature_field 的值对文档进行排名,并应用一个 1.5 的提升因子。

36. 使用 distance_feature 查询

distance_feature 查询用于基于距离对文档进行排名。

示例:基于距离对文档进行排名
{ 
    "query": { 
    "distance_feature": { 
    "field": "date_field", "pivot": "7d", "origin": "now" } } } 

在这个示例中,查询将基于 date_field 的值与当前时间的距离对文档进行排名,使用 7d 作为基准距离。

37. 使用 script 查询

script 查询允许你使用脚本来定义自定义查询逻辑。

示例:使用脚本定义自定义查询逻辑
{ 
    "query": { 
    "script": { 
    "script": { 
    "source": "doc['field1'].value > params.threshold", "params": { 
    "threshold": 10 } } } } } 

在这个示例中,查询将匹配 field1 的值大于 10 的文档。

38. 使用 wrapper 查询

wrapper 查询用于包装一个 Base64 编码的查询。

示例:包装一个 Base64 编码的查询
{ 
    "query": { 
    "wrapper": { 
    "query": "eyJ0ZXJtIjp7ImZpZWxkMSI6InZhbHVlMSJ9fQ==" } } } 

在这个示例中,查询将解码 Base64 编码的查询 eyJ0ZXJtIjp7ImZpZWxkMSI6InZhbHVlMSJ9fQ== 并执行它。

39. 使用 exists 查询

exists 查询用于匹配包含特定字段的文档。

示例:匹配包含特定字段的文档
{ 
    "query": { 
    "exists": { 
    "field": "field1" } } } 

在这个示例中,查询将匹配包含 field1 字段的文档。

40. 使用 type 查询

type 查询用于匹配特定类型的文档。

示例:匹配特定类型的文档
{ 
    "query": { 
    "type": { 
    "value": "type1" } } } 

在这个示例中,查询将匹配类型为 type1 的文档。

41. 使用 terms 查询

terms 查询用于匹配字段值在给定集合中的文档。

示例:匹配字段值在给定集合中的文档
{ 
    "query": { 
    "terms": { 
    "field1": ["value1", "value2", "value3"] } } } 

在这个示例中,查询将匹配 field1 的值在 ["value1", "value2", "value3"] 集合中的文档。

42. 使用 wildcard 查询

wildcard 查询用于匹配包含通配符的字段值。

示例:匹配包含通配符的字段值
{ 
    "query": { 
    "wildcard": { 
    "field1": "val*" } } } 

在这个示例中,查询将匹配 field1 的值以 val 开头的文档。

43. 使用 regexp 查询

regexp 查询用于匹配符合正则表达式的字段值。

示例:匹配符合正则表达式的字段值
{ 
    "query": { 
    "regexp": { 
    "field1": "val.*" } } } 

在这个示例中,查询将匹配 field1 的值符合正则表达式 val.* 的文档。

44. 使用 prefix 查询

prefix 查询用于匹配匹配以特定前缀开头的字段值。

示例:匹配以特定前缀开头的字段值
{ 
    "query": { 
    "prefix": { 
    "field1": "val" } } } 

在这个示例中,查询将匹配 field1 的值以 val 开头的文档。

45. 使用 fuzzy 查询

fuzzy 查询用于匹配与给定值相似的字段值,允许一定程度的模糊匹配。

示例:匹配与给定值相似的字段值
{ 
    "query": { 
    "fuzzy": { 
    "field1": { 
    "value": "value1", "fuzziness": "AUTO" } } } } 

在这个示例中,查询将匹配 field1 的值与 value1 相似的文档,模糊度设置为 AUTO

46. 使用 ids 查询

ids 查询用于匹配特定 ID 的文档。

示例:匹配特定 ID 的文档
{ 
    "query": { 
    "ids": { 
    "values": ["1", "2", "3"] } } } 

在这个示例中,查询将匹配 ID 为 123 的文档。

47. 使用 geo_shape 查询

geo_shape 查询用于匹配地理形状字段。

示例:匹配地理形状字段
{ 
    "query": { 
    "geo_shape": { 
    "location": { 
    "shape": { 
    "type": "envelope", "coordinates": [[13.0, 53.0], [14.0, 52.0]] }, "relation": "within" } } } } 

在这个示例中,查询将匹配 location 字段在指定的地理形状内的文档。

48. 使用 geo_bounding_box 查询

geo_bounding_box 查询用于匹配在指定地理边界框内的文档。

示例:匹配在指定地理边界框内的文档
{ 
    "query": { 
    "geo_bounding_box": { 
    "location": { 
    "top_left": { 
    "lat": 53.0, "lon": 13.0 }, "bottom_right": { 
    "lat": 52.0, "lon": 14.0 } } } } } 

在这个示例中,查询将匹配 location 字段在指定地理边界框内的文档。

49. 使用 geo_distance 查询

geo_distance 查询用于匹配在指定距离内的文档。

示例:匹配在指定距离内的文档
{ 
    "query": { 
    "geo_distance": { 
    "distance": "200km", "location": { 
    "lat": 52.0, "lon": 13.0 } } } } 

在这个示例中,查询将匹配 location 字段在距离 52.0, 13.0 200 公里范围内的文档。

50. 使用 geo_polygon 查询

geo_polygon 查询用于匹配在指定地理多边形内的文档。

示例:匹配在指定地理多边形内的文档
{ 
    "query": { 
    "geo_polygon": { 
    "location": { 
    "points": [ { 
    "lat": 52.0, "lon": 13.0 }, { 
    "lat": 53.0, "lon": 14.0 }, { 
    "lat": 52.5, "lon": 13.5 } ] } } } } 

在这个示例中,查询将匹配 location 字段在指定地理多边形内的文档。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110034.html

(0)
上一篇 2026-02-03 09:33
下一篇 2026-02-03 10:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信