Elasticsearch的多种查询方式

news/2024/11/24 9:10:48/

1. Elasticsearch的查询方式

Elasticsearch(ES)提供了多种查询方式,可以根据不同的需求和场景选择合适的查询类型。

2. 常用的ES查询方式

  • Match Query(匹配查询): 根据字段中的内容进行全文匹配查询,可以使用match、multi_match等。

  • Term Query(精确查询): 根据字段中的精确值进行查询,适用于keyword类型或者已经执行过分词器的字段。

  • Range Query(范围查询): 根据字段中的范围值进行查询,可以用来查询数字或日期范围,例如大于、小于、范围内等。

  • Bool Query(布尔查询): 通过逻辑运算符(must、must_not、should)组合多个查询条件,实现更复杂的查询逻辑。

  • Match Phrase Query(短语匹配查询): 根据字段中连续的短语进行查询,适用于需要保持短语顺序的查询。

  • Prefix Query(前缀查询): 根据字段中的前缀进行查询,适用于需要按照前缀匹配查询的场景。

  • Wildcard Query(通配符查询): 根据通配符模式进行查询,支持通配符符号(*?)进行模糊匹配。

  • Fuzzy Query(模糊查询): 根据字段中的模糊匹配进行查询,可以通过设置fuzziness参数来控制模糊程度。

  • Nested Query(嵌套查询): 根据嵌套对象进行查询,以便查询嵌套在文档中的相关信息。

  • Aggregation Query(聚合查询): 用于计算、统计和分析数据,包括求和、平均值、最小值、最大值、分组等操作。

以上只是一些常见的查询方式,ES还提供了更多的查询类型和功能,如复杂查询、地理位置查询、正则表达式查询等,可根据实际需求选择合适的查询方式。

3. 查询案例

下面是一个包含各种查询案例的示例:

3.1 products的索引

product_name:产品名称,类型为textcategory:产品类别,类型为keywordprice:产品价格,类型为floatdescription:产品描述,类型为texttags:产品标签,类型为keyword

创建索引products:

PUT /products
{"settings": {"number_of_shards": 1,"number_of_replicas": 1},"mappings": {"properties": {"product_name": {"type": "text"},"category": {"type": "keyword"},"price": {"type": "float"},"description": {"type": "text"},"tags": {"type": "keyword"}}}
}

创建了一个名为products的索引。 number_of_shards定义了主分片数为1。
number_of_replicas定义了副本数为1。 mappings定义了索引中的字段类型和属性。

3.2 Match Query(匹配查询)

POST /products/_search
{"query": {"match": {"product_name": "laptop"}}
}

使用match查询来进行全文匹配查询。 在product_name字段中匹配关键词"laptop"。
返回与"laptop"相关度最高的文档。

3.3 Term Query(精确查询)

POST /products/_search
{"query": {"term": {"category": "electronics"}}
}

使用term查询进行精确匹配查询。 在category字段中精确匹配"electronics"。
返回与"electronics"完全一致的文档。

3.4 Range Query(范围查询)

POST /products/_search
{"query": {"range": {"price": {"gte": 100,"lte": 500}}}
}

使用range查询进行范围查询。 在price字段中查询价格在100到500之间的文档。 返回价格在100到500之间的文档。

3.5 Bool Query(布尔查询)

POST /products/_search
{"query": {"bool": {"must": [{ "match": { "product_name": "laptop" } },{ "term": { "category": "electronics" } }],"must_not": [{ "range": { "price": { "gte": 2000 } } }],"should": [{ "match": { "description": "lightweight" } },{ "match": { "tags": "portable" } }]}}
}

使用bool查询进行多条件查询逻辑。
must子句中同时满足product_name为"laptop"和category为"electronics"的文档。
must_not子句中排除价格大于等于2000的文档。
should子句中满足description包含"lightweight"或tags包含"portable"的文档。
返回符合以上条件的文档。

3.6 Match Phrase Query(短语匹配查询)

POST /products/_search
{"query": {"match_phrase": {"product_name": "red laptop"}}
}

使用match_phrase查询进行短语匹配查询。 在product_name字段中匹配短语"red laptop"。 返回包含短语"red
laptop"的文档。

3.7 Prefix Query(前缀查询)

POST /products/_search
{"query": {"prefix": {"product_name": "ca"}}
}

使用prefix查询进行前缀匹配查询。 在product_name字段中匹配以"ca"开头的文档。 返回以"ca"开头的产品名称的文档。

3.8 Wildcard Query(通配符查询)

POST /products/_search
{"query": {"wildcard": {"product_name": "l*t"}}
}

使用wildcard查询进行通配符模式匹配查询。 在product_name字段中匹配带有"l"和"t"之间任意字符的文档。
返回符合通配符模式的文档。

3.9 Fuzzy Query(模糊查询)

POST /products/_search
{"query": {"fuzzy": {"product_name": {"value": "laptop","fuzziness": 2}}}
}

使用fuzzy查询进行模糊匹配查询。 在product_name字段中匹配与"laptop"相似的文档。
fuzziness参数设置了相似度为2。 返回与"laptop"相似的文档。

3.10 Nested Query(嵌套查询)

POST /products/_search
{"query": {"nested": {"path": "reviews","query": {"match": {"reviews.comment": "good"}}}}
}

使用nested查询进行嵌套查询。 在reviews嵌套字段中根据reviews.comment字段的值查询"good"的文档。
返回包含满足嵌套查询条件的文档。

3.11 Aggregation Query(聚合查询)

POST /products/_search
{"size": 0,"aggregations": {"avg_price": {"avg": {"field": "price"}},"max_price": {"max": {"field": "price"}},"category_count": {"terms": {"field": "category"}}}
}

使用aggregations进行聚合查询。 avg聚合计算了price字段的平均值。 max聚合计算了price字段的最大值。
terms聚合按category字段进行分组统计。 返回计算和统计结果,包括平均价格、最高价格和每个分类的文档数量。


http://www.ppmy.cn/news/777848.html

相关文章

电脑下乡——看起来很美

前不久,我的一个朋友打电话给我,让我考虑做他们公司的代理的宏基电脑的销售代理商,为宏基电脑下乡部署销售网点。在明白了朋友打电话的来意后,虽然感觉有点意外,但还是对此有点兴趣的,毕竟这也是一件能让我…

遥控器,未来世界的入口?

2013-05-04来源于 虎嗅,被关注 163次,分类:趋势 1 在人们眼中,“遥控器”是一个微不足道的小玩意,一个现实世界可有可无的小产品,而且很容易被替代,这款产品目前的样子似乎就是其终极形态&#…

二手回收能否翻过BAT这座大山?

自2015年几大合并事件后,互联网江山基本都归于BAT三家。即便近日战火熊熊的本地生活和外卖也都是百度、阿里和腾讯的家门事。创业浪潮在2015年疯狂过后,留给下一年的风口似乎不多了。 不过有媒体预测智能硬件、虚拟现实、跑步社交、生活O2O和再生资源这五…

vue实现动态URL

最近在项目上要用到动态baseURL,用的是vuex存储,具体实现如下 1.拦截器中重写baseURL 但是需要注意的是这个url必须符合URL格式,所以前端校验是必须的 2.前端校验 const validateUrl (rule, value, callback) > {if (isBlank(value)) {callback(ne…

C#学习之路-类型转换

类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。 C# 中的类型转换可以分为两种:隐式转换和显式转换。 隐式类型转换 隐式转换是指将一个较小范围的数据类型转换为较大范围的数据类型时,编译器会自动完成类型转换…

视频编码fmpeg 常用命令汇总

转自 kingvon_liwei  part 1: 经常用到ffmpeg 做一些视频数据的处理转换等,用来做测试,今天总结了一下,参考了网上部分朋友的经验,一起在这里汇总了一下,有需要的朋友可以收藏测试一下&am…

Window Mobile视频会议程序的开发

本文来自:http://hi.baidu.com/yuanzb/blog/item/c7eb57edc83d71d6b31cb1d5.html 适用平台 Pocket PC 2003 Phone Edition Windows Mobile 2003/SE Windows Mobile 5.0 开发工具 Microsoft Embedded Visual C 4.0 Microsoft Visual Studio 2005 及适用于各平台的SDK…

【正点原子FPGA连载】 第三十二章基于lwip的TCP服务器性能测试实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

第三十二章基于lwip的TCP服务器性能测试实验 上一章的lwip Echo Server实验让我们对lwip有一个基本的了解,而Echo Server是基于TCP协议的。TCP协议是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。本章我们将了解lwip tcp协议的使用并…