【ES常用查询操作】

server/2024/10/18 14:15:28/

在 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 字段在指定地理多边形内的文档。


http://www.ppmy.cn/server/109671.html

相关文章

【设计模式】简单工厂模式

❓首先什么是设计模式? 😵相信刚上大学的你和我一样,在学习这门课的时候根本不了解这些设计原则和模式有什么用处,反而不如隔壁的C更有意思,至少还能弹出一个小黑框,给我个hello world。 ✨ 如何你和我一样…

MySQL:简述对事务的认识

浅谈对Spring事务的认识:https://xiaoer.blog.csdn.net/article/details/80849971 一、事务的特性 事务是数据库永恒不变的话题, ACID:原子性,一致性,隔离性,持久性。 (1)原子性&am…

Python中排序算法之冒泡排序

排序算法是将给定的数列中的数进行升序(从小到大)或者降序(从大到小)排列。冒泡排序是排序算法的一种。 1 冒泡排序的原理 1.1 基本思想 冒泡排序是将数据中较大或者较小的数据依次向右推移的一种排序技术。它的基本思想是比较…

基于django的失物招领系统的设计与实现/ 基于Python的失物招领系统的设计与实现/失物招领管理系统

失物招领系统的设计与实现 摘要:伴随着我国全面推动信息化的趋势,我国的很多行业都在朝着互联网的方向进发。结合计算机技术的失物招领系统能够很好地解决传统失物招领存在的问题,能够提高管理员管理的效率,改善服务质量。优秀的失物招领系统…

低代码技术助力移动端开发:简化开发流程,实现快速创新

在移动互联网快速发展的今天,企业和开发者面临着越来越高的需求,要求开发高质量、功能强大的移动应用,以满足用户的期待和市场的变化。然而,传统的移动端开发流程通常复杂且耗时,需要投入大量的资源和开发人员。为了应…

为什么 mysql-connector-java 只需要在 runtime 作用范围中配置

在 Java 中,访问数据库通常依赖于 JDBC(Java Database Connectivity)技术。JDBC 定义了一套标准的 API,用于与数据库进行交互。为了访问数据库,我们编写的代码需要依赖于 JDBC 接口而不是具体的数据库实现(…

深度学习100问35:如何避免梯度爆炸发生

嘿,想避免梯度爆炸这个麻烦家伙,有好多招儿呢。 首先说说权重初始化,这就好比给游戏里的角色分配初始能力值。得合理安排神经网络的权重初始化哦,不然一开始就可能出问题。可以用像 Xavier 初始化或者 He 初始化这些方法&#x…

前端速通面经八股系列(一)—— CSS篇

CSS高频面经目录 一、CSS基础1. CSS选择器及其优先级2. CSS中可继承与不可继承属性有哪些3. display的属性值及其作用4. display的block、inline和inline-block的区别5. 隐藏元素的方法有哪些6. link和import的区别7. transition和animation的区别8. display:none与visibility:…