个人名片:
博主:酒徒ᝰ.
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:三人行,必有我师焉。
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看
目录
- 一、DSL查询文档
- 1. DSL查询分类
- 2. 全文检索查询
- 3. 精准查询
一、DSL查询文档
探索Elasticsearch的DSL查询与精准查询:快速获取数据的重要工具
Elasticsearch是一款开源的、分布式的、实时的搜索和分析引擎。自2010年诞生以来,它已经成为了大数据时代背景下不可或缺的工具。Elasticsearch的核心功能是提供近实时的搜索和分析服务,支持全文搜索、结构化搜索以及聚合查询等。本文将向大家介绍Elasticsearch的DSL查询和精准查询,以帮助你更快速地获取所需数据。
1. DSL查询分类
DSL(Domain Specific Language)查询是Elasticsearch中的一种查询方式,它允许我们使用类似SQL的语法来查询数据。通过DSL查询,我们可以很方便地对数据进行各种复杂的查询和分析。
Elasticsearch提供了基于JSON的DSL来定义查询。常见的查询类型包括:
查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:
- match_query
- multi_match_query
精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:
- ids
- range
- term
地理(geo)查询:根据经纬度查询。例如:
- geo_distance
- geo_bounding_box
复合查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:
- bool
- function_score
查询的语法基本:
GET /indexName/_search
{
"query": {
"查询类型": {
"查询条件": "条件值"
}
}
}
示例:
查询全部
2. 全文检索查询
Elasticsearch中的全文检索查询是一种高级搜索功能,它可以在一个文本字段中搜索特定的词或短语,并返回匹配的结果。
全文检索查询的作用:
- 全文检索查询可以帮助用户在一个文本字段中快速地搜索特定的词或短语,提高查询效率。
- 全文检索查询可以大大减少用户的浏览和操作次数,提高用户体验。
- 全文检索查询可以帮助用户在一个文本字段中查找含有特定词或短语的文档,提高查全率和查准率。
- 全文检索查询可以帮助用户快速地从一个文本字段中查找含有特定词或短语的文档,提高查询效率。
全文检索查询,会对用户输入内容分词,常用于搜索框搜索
常见的全文检索查询包括:
- match查询:单字段查询
- multi_match查询:多字段查询,任意一个字段符合条件就算符合查询条件
match查询语法如下:
GET /indexName/_search
{
"query": {
"match": {
"FIELD": "TEXT"
}
}
}
示例:
mulit_match语法如下:
GET /indexName/_search
{
"query": {
"multi_match": {
"query": "TEXT",
"fields": ["FIELD1", " FIELD12"]
}
}
}
示例:
总结
match和multi_match的区别是什么?
match:根据一个字段查询
multi_match:根据多个字段查询,参与查询字段越多,查询性能越差
3. 精准查询
精准查询是Elasticsearch中的另一种查询方式,它允许我们根据字段值的特征来查询数据。这种查询方式通常用于更精确的数据检索。
精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。常见的有:
- term:根据词条精确值查询
- range:根据值的范围查询
term查询
语法说明:
// term查询
GET /indexName/_search
{
"query": {
"term": {
"FIELD": {
"value": "VALUE"
}
}
}
}
示例:
range查询
基本语法:
// range查询
GET /indexName/_search
{
"query": {
"range": {
"FIELD": {
"gte": 10, // 这里的gte代表大于等于,gt则代表大于
"lte": 20 // lte代表小于等于,lt则代表小于
}
}
}
}
示例:
总结
精确查询常见的有哪些?
term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
range查询:根据数值范围查询,可以是数值、日期的范围