Elasticsearch(简称ES)是一个基于Apache Lucene构建的开源搜索引擎,它提供了一个分布式多用户能力的全文搜索引擎,在ES中进行查询时,可以使用多种不同的方式和语法来检索数据,以下是一些常见的ES查询类型及其用法示例:
基本查询
Match 查询:用于匹配字段中的文本,要查找标题中包含“Elasticsearch”的所有文档,可以使用以下查询:
{ "query": { "match": { "title": "Elasticsearch" } } }
Term 查询:用于精确匹配字段的值,要查找标签为“tutorial”的所有文档,可以使用以下查询:
{ "query": { "term": { "tags": "tutorial" } } }
Range 查询:用于在一个范围内搜索数值、日期或IP地址等类型的字段,要查找价格在10到20之间的所有商品,可以使用以下查询:
{ "query": { "range": { "price": { "gte": 10, "lte": 20 } } } }
高级查询
Bool 查询:允许组合多个查询条件,包括AND、OR和NOT操作,要查找标题包含“Elasticsearch”且价格小于100的商品,可以使用以下查询:
{ "query": { "bool": { "must": [ { "match": { "title": "Elasticsearch" } }, { "range": { "price": { "lt": 100 } } } ] } } }
Wildcard 查询:使用通配符来匹配字符串,要查找以“Te”开头的所有文档,可以使用以下查询:
{ "query": { "wildcard": { "name": "Te*" } } }
Prefix 查询:查找以指定前缀开始的字符串,要查找以“Comp”开头的所有文档,可以使用以下查询:
{ "query": { "prefix": { "name": "Comp" } } }
特殊查询
Geo 距离查询:用于基于地理位置的距离搜索,要查找距离特定坐标点5公里以内的所有地点,可以使用以下查询:
{ "query": { "geo_distance": { "location": { "lat": 40.7128, "lon": -74.0060, "distance": "5km", "distance_type": "arc" } } } }
Nested 查询:用于在嵌套对象内进行搜索,如果每个文档都有一个名为comments
的嵌套对象数组,并且你想在其中搜索特定的评论内容,可以使用以下查询:
{ "query": { "nested": { "path": "comments", "query": { "match": { "comments.text": "great" } } } } }
Parent/Child 查询:用于在父子关系的数据结构中进行搜索,如果要查找某个父级ID下的所有子文档,可以使用以下查询:
{ "query": { "has_parent": { "parent_type": "parent", "query": { "term": { "id": "123" } } } } }
相关问答FAQs
Q: ES支持哪些类型的查询?
A: ES支持多种类型的查询,包括但不限于基本查询(如Match、Term、Range)、高级查询(如Bool、Wildcard、Prefix)、特殊查询(如Geo距离、Nested、Parent/Child),这些查询可以根据需要进行组合和嵌套,以满足复杂的搜索需求。
Q: 如何在ES中执行一个布尔查询?
A: 在ES中执行布尔查询需要使用bool
查询语法,可以通过指定must
、should
、must_not
等关键字来定义不同的条件组合,要查找同时满足两个条件的文档,可以将它们放在must
数组中;而如果只需要满足其中一个条件,则可以使用should
。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1268817.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复