《Elasticsearch新手教程》
第一章:Elasticsearch安装教程
1.1 准备工作与系统要求
在开始安装Elasticsearch之前,确保你的系统满足以下要求:
- 操作系统:支持Linux、Windows、macOS等主流操作系统。
- Java版本:Elasticsearch需要Java环境的支持,建议安装Java 8或以上版本。
- 硬件要求:建议至少具有2GB的内存和20GB的可用存储空间。
1.2 安装Java环境
Elasticsearch是基于Java开发的,因此在安装之前需要先安装Java运行时环境(JRE)或Java开发工具包(JDK)。以下是安装Java的简要步骤:
在Linux系统上安装Java:
# 更新包列表
sudo apt update
# 安装OpenJDK
sudo apt install openjdk-8-jre # 安装JRE
sudo apt install openjdk-8-jdk # 安装JDK(如需要编译Java程序)
在Windows系统上安装Java:
- 访问Oracle官网下载JDK安装程序,并按照安装向导进行安装。
在macOS系统上安装Java:
- macOS通常预装了Java运行时环境,可以通过终端命令进行检查和安装。
1.3 下载与安装Elasticsearch
安装Java后,现在可以开始安装Elasticsearch了。以下是安装Elasticsearch的步骤:
在Linux和macOS系统上安装Elasticsearch:
# 下载Elasticsearch安装包(以7.x版本为例,你也可以选择其他版本)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.x.x-linux-x86_64.tar.gz
# 解压安装包
tar -xzvf elasticsearch-7.x.x-linux-x86_64.tar.gz
# 进入解压后的目录
cd elasticsearch-7.x.x
# 启动Elasticsearch节点
./bin/elasticsearch
在Windows系统上安装Elasticsearch:
-
访问Elasticsearch官网下载Windows版的zip压缩包。
-
解压下载的zip压缩包到合适的目录。
-
打开命令行,进入Elasticsearch目录,并执行以下命令启动节点:
bin\elasticsearch.bat
1.4 配置Elasticsearch集群
默认情况下,启动的Elasticsearch节点是单节点的,如果需要创建一个多节点的Elasticsearch集群,需要进行一些配置。以下是简单的集群配置示例:
在Linux和macOS系统上配置Elasticsearch集群: 在Elasticsearch目录下的config目录中,有一个名为elasticsearch.yml的配置文件。你可以编辑这个文件来配置节点的名称、集群名称、网络绑定地址等。
# 在elasticsearch.yml中配置集群信息
cluster.name: my-elasticsearch-cluster
node.name: node-1
network.host: 0.0.0.0
在Windows系统上配置Elasticsearch集群:
- 在Elasticsearch目录下的config目录中,找到elasticsearch.yml文件,并编辑同样的配置。
1.5 启动与停止Elasticsearch节点
在Linux和macOS系统上启动Elasticsearch节点: 进入Elasticsearch目录,执行以下命令启动节点:
./bin/elasticsearch
在Windows系统上启动Elasticsearch节点: 打开命令行,进入Elasticsearch目录,执行以下命令启动节点:
bin\elasticsearch.bat
停止Elasticsearch节点: 按下Ctrl + C组合键停止运行节点。
1.6 使用Elasticsearch命令行界面
启动Elasticsearch节点后,可以通过浏览器或命令行来访问Elasticsearch的RESTful API接口,进行索引、搜索等操作。
通过浏览器访问Elasticsearch: 打开浏览器,访问http://localhost:9200/
,你将会看到类似以下的JSON格式的响应:
{
"name" : "node-1",
"cluster_name" : "my-elasticsearch-cluster",
"cluster_uuid" : "3BDGFfHTRJ6L8W5YCR1XRA",
"version" : {
"number" : "7.14.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
"build_date" : "2022-07-01T21:17:04.000Z",
"build_snapshot" : false,
"lucene_version" : "8.10.2",
"minimum_wire_compatibility_version" : "7.14.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
通过命令行访问Elasticsearch:
-
在命令行中使用curl或HTTP客户端工具发送HTTP请求,与Elasticsearch的RESTful API进行交互。
-
例如,获取Elasticsearch的集群健康状态,可以执行以下命令:
curl -X GET "localhost:9200/_cat/health?v"
至此,第一章:Elasticsearch安装教程就完成了。通过本章的学习,你已经掌握了如何安装Java环境和Elasticsearch,以及如何配置和启动Elasticsearch节点。接下来,你可以进入第二章,学习安装和配置一些基本插件,为后续的查询操作做好准备。
第二章:基本插件的安装与基础知识
2.1 插件基础知识
在Elasticsearch中,插件是用于扩展其功能的模块化组件。它们可以用于增加新的分析器、索引和查询类型,或者添加其他定制功能,以满足特定的业务需求。插件可以通过简单的安装和配置,无需修改Elasticsearch的源代码,就能够快速地为系统增加新的功能,这也是Elasticsearch受欢迎的原因之一。
2.1.1 插件的作用和功能
插件在Elasticsearch中扮演着至关重要的角色,它们可以用于以下目的:
2.1.2 插件类型
根据功能和用途的不同,Elasticsearch的插件可以分为以下几类:
2.1.3 Elasticsearch插件生态
Elasticsearch生态系统拥有丰富多样的插件,涵盖了各个方面的需求。官方提供了许多优秀的插件,同时社区也贡献了大量的插件,满足了不同场景和行业的需求。
要安装插件,我们可以通过Elasticsearch的插件管理工具进行操作。插件通常以zip或tar.gz等压缩包形式发布,我们只需将其下载到Elasticsearch节点,并使用插件管理工具进行安装,即可快速扩展Elasticsearch的功能。
在接下来的章节中,我们将学习如何安装常用的插件,包括IK分词器插件、拼音插件、简繁体转换插件和同义词插件,为Elasticsearch增加中文分词、拼音搜索和同义词处理等功能。同时,我们还会学习如何验证和管理已安装的插件,以及如何升级插件到新的版本。通过本章的学习,您将能够充分利用Elasticsearch插件,为您的应用提供更强大和灵活的搜索和分析功能。
2.2 安装IK分词器插件
IK分词器(IK Analyzer)是一个专门为中文文本设计的分词器,它能够将中文文本进行智能分词,将文本拆分成有意义的词汇,从而提高中文全文检索的效果和准确性。在Elasticsearch中使用IK分词器可以使搜索更加智能和准确,适用于中文内容的索引和搜索。
2.2.1 下载IK分词器插件
首先,我们需要下载IK分词器插件的安装包。您可以在GitHub的Elasticsearch-Analysis-IK仓库中找到IK分词器插件的代码和发布版本。
插件下载地址:github.com/medcl/elast…
请选择合适的版本,下载源码包(Source code (zip))或者已编译的安装包(Pre-built plugins (zip))。
2.2.2 安装IK分词器插件
下载完成IK分词器插件后,我们将其解压缩到Elasticsearch的插件目录下进行安装。
以下是安装IK分词器插件的步骤:
elasticsearch/
|-- plugins/
| |-- analysis-ik/
| |-- config/
| |-- lib/
| |-- plugin-descriptor.properties
| |-- README.md
启动成功后,IK分词器插件就已经成功安装并可用了。
2.2.3 验证IK分词器插件
为了验证IK分词器插件是否成功安装,我们可以使用Elasticsearch的_analyze API进行测试。
通过发送如下的HTTP POST请求,我们可以对文本进行分词测试:
POST /_analyze
{
"analyzer": "ik_max_word",
"text": "你好,Elasticsearch插件安装成功了吗?"
}
如果插件安装成功,返回的分词结果应该如下所示:
{
"tokens": [
{
"token": "你好",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 0
},
{
"token": "Elasticsearch",
"start_offset": 3,
"end_offset": 16,
"type": "ENGLISH",
"position": 1
},
{
"token": "插件",
"start_offset": 16,
"end_offset": 18,
"type": "CN_WORD",
"position": 2
},
{
"token": "安装",
"start_offset": 18,
"end_offset": 20,
"type": "CN_WORD",
"position": 3
},
{
"token": "成功",
"start_offset": 20,
"end_offset": 22,
"type": "CN_WORD",
"position": 4
},
{
"token": "了",
"start_offset": 22,
"end_offset": 23,
"type": "CN_WORD",
"position": 5
},
{
"token": "吗",
"start_offset": 23,
"end_offset": 24,
"type": "CN_WORD",
"position": 6
}
]
}
分词结果中的"tokens"数组包含了分词后的词汇和它们的类型。如果能够看到以上的结果,说明IK分词器插件已经成功安装并生效。
在本节中,我们学习了如何下载和安装IK分词器插件,以及如何验证插件是否成功安装。接下来,我们将继续学习其他插件的安装和使用。
2.3 安装拼音插件
拼音插件(Pinyin Analysis Plugin)是Elasticsearch的一个常用插件,它可以将中文文本转换为拼音,从而实现中文拼音搜索的功能。通过安装拼音插件,您可以在索引和搜索中使用拼音进行更灵活的查询。
2.3.1 下载拼音插件
您可以在GitHub的elasticsearch-analysis-pinyin仓库中找到拼音插件的代码和发布版本。
插件下载地址:github.com/medcl/elast…
请选择合适的版本,下载源码包(Source code (zip))或者已编译的安装包(Pre-built plugins (zip))。
2.3.2 安装拼音插件
下载完成拼音插件后,我们将其解压缩到Elasticsearch的插件目录下进行安装。
以下是安装拼音插件的步骤:
elasticsearch/
|-- plugins/
| |-- analysis-pinyin/
| |-- config/
| |-- lib/
| |-- plugin-descriptor.properties
| |-- README.md
启动成功后,拼音插件就已经成功安装并可用了。
2.3.3 验证拼音插件
为了验证拼音插件是否成功安装,我们可以使用Elasticsearch的_analyze API进行测试。
通过发送如下的HTTP POST请求,我们可以对文本进行拼音分词测试:
POST /_analyze
{
"analyzer": "pinyin",
"text": "你好,Elasticsearch拼音插件安装成功了吗?"
}
如果插件安装成功,返回的分词结果应该如下所示:
{
"tokens": [
{
"token": "ni",
"start_offset": 0,
"end_offset": 1,
"type": "pinyin",
"position": 0
},
{
"token": "hao",
"start_offset": 1,
"end_offset": 2,
"type": "pinyin",
"position": 1
},
{
"token": ",",
"start_offset": 2,
"end_offset": 3,
"type": "word",
"position": 2
},
{
"token": "elasticsearch",
"start_offset": 3,
"end_offset": 17,
"type": "english",
"position": 3
},
{
"token": "pin",
"start_offset": 17,
"end_offset": 19,
"type": "pinyin",
"position": 4
},
{
"token": "yin",
"start_offset": 19,
"end_offset": 21,
"type": "pinyin",
"position": 5
},
{
"token": "插件",
"start_offset": 21,
"end_offset": 23,
"type": "word",
"position": 6
},
{
"token": "安装",
"start_offset": 23,
"end_offset": 25,
"type": "word",
"position": 7
},
{
"token": "成功",
"start_offset": 25,
"end_offset": 27,
"type": "word",
"position": 8
},
{
"token": "了",
"start_offset": 27,
"end_offset": 28,
"type": "word",
"position": 9
},
{
"token": "吗",
"start_offset": 28,
"end_offset": 29,
"type": "word",
"position": 10
}
]
}
分词结果中的"tokens"数组包含了拼音分词后的词汇和它们的类型。如果能够看到以上的结果,说明拼音插件已经成功安装并生效。
在本节中,我们学习了如何下载和安装拼音插件,以及如何验证插件是否成功安装。接下来,我们将继续学习其他插件的安装和使用。
2.4 安装简繁体转换插件
简繁体转换插件(Smart Chinese Analysis Plugin)是Elasticsearch的另一个常用插件,它可以将中文文本在简体和繁体之间进行转换,从而实现简繁体查询的功能。通过安装简繁体转换插件,您可以在索引和搜索中同时支持简体和繁体查询。
2.4.1 下载简繁体转换插件
您可以在GitHub的elasticsearch-analysis-stconvert仓库中找到简繁体转换插件的代码和发布版本。
插件下载地址:github.com/medcl/elast…
请选择合适的版本,下载源码包(Source code (zip))或者已编译的安装包(Pre-built plugins (zip))。
2.4.2 安装简繁体转换插件
下载完成简繁体转换插件后,我们将其解压缩到Elasticsearch的插件目录下进行安装。
以下是安装简繁体转换插件的步骤:
elasticsearch/
|-- plugins/
| |-- analysis-stconvert/
| |-- config/
| |-- lib/
| |-- plugin-descriptor.properties
| |-- README.md
启动成功后,简繁体转换插件就已经成功安装并可用了。
2.4.3 验证简繁体转换插件
为了验证简繁体转换插件是否成功安装,我们可以使用Elasticsearch的_analyze API进行测试。
通过发送如下的HTTP POST请求,我们可以对文本进行简繁体转换测试:
POST /_analyze
{
"analyzer": "stconvert",
"text": "中國歡迎你!"
}
如果插件安装成功,返回的分词结果应该如下所示:
{
"tokens": [
{
"token": "中国",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0
},
{
"token": "欢迎",
"start_offset": 3,
"end_offset": 6,
"type": "word",
"position": 1
},
{
"token": "你",
"start_offset": 6,
"end_offset": 7,
"type": "word",
"position": 2
},
{
"token": "!",
"start_offset": 7,
"end_offset": 8,
"type": "word",
"position": 3
}
]
}
分词结果中的"tokens"数组包含了简繁体转换后的词汇和它们的类型。如果能够看到以上的结果,说明简繁体转换插件已经成功安装并生效。
2.5 安装同义词插件
同义词插件(Synonym Analysis Plugin)是Elasticsearch的另一个常用插件,它允许您在搜索中使用同义词来扩展查询的范围。通过安装同义词插件,您可以在索引和搜索中使用同义词,从而提高搜索的准确性和覆盖率。
2.5.1 下载同义词插件
您可以在GitHub的elasticsearch-analysis-synonym仓库中找到同义词插件的代码和发布版本。
插件下载地址:github.com/medcl/elast…
请选择合适的版本,下载源码包(Source code (zip))或者已编译的安装包(Pre-built plugins (zip))。
2.5.2 安装同义词插件
下载完成同义词插件后,我们将其解压缩到Elasticsearch的插件目录下进行安装。
以下是安装同义词插件的步骤:
elasticsearch/
|-- plugins/
| |-- analysis-synonym/
| |-- config/
| |-- lib/
| |-- plugin-descriptor.properties
| |-- README.md
快速,迅速,快捷
搜索,查询,检索
启动成功后,同义词插件就已经成功安装并可用了。
2.5.3 验证同义词插件
为了验证同义词插件是否成功安装,我们可以使用Elasticsearch的_analyze API进行测试。
通过发送如下的HTTP POST请求,我们可以对文本进行同义词扩展测试:
POST /_analyze
{
"analyzer": "synonym",
"text": "快速搜索"
}
如果插件安装成功,返回的分词结果应该如下所示:
{
"tokens": [
{
"token": "快速",
"start_offset": 0,
"end_offset": 2,
"type": "SYNONYM",
"position": 0
},
{
"token": "迅速",
"start_offset": 0,
"end_offset": 2,
"type": "SYNONYM",
"position": 0
},
{
"token": "快捷",
"start_offset": 0,
"end_offset": 2,
"type": "SYNONYM",
"position": 0
},
{
"token": "搜索",
"start_offset": 2,
"end_offset": 4,
"type": "SYNONYM",
"position": 1
},
{
"token": "查询",
"start_offset": 2,
"end_offset": 4,
"type": "SYNONYM",
"position": 1
},
{
"token": "检索",
"start_offset": 2,
"end_offset": 4,
"type": "SYNONYM",
"position": 1
}
]
}
分词结果中的"tokens"数组包含了同义词扩展后的词汇和它们的类型。如果能够看到以上的结果,说明同义词插件已经成功安装并生效。
在本节中,我们学习了如何下载和安装简繁体转换插件和同义词插件,以及如何验证插件是否成功安装。接下来,我们将继续学习其他插件的安装和使用,包括同音词插件、模糊查询插件等。
2.6 插件的测试与验证
- 使用示例数据测试已安装的插件
- 验证插件是否生效及配置是否正确
2.7 插件的管理与升级
- 管理已安装的插件,包括卸载和禁用插件
- 如何升级插件到新的版本
第三章:DSL查询语句
在Elasticsearch中,查询是通过使用DSL(Domain-Specific Language)查询语句来进行的。DSL是一种专门用于查询的领域特定语言,它允许您构建各种复杂的查询来搜索文档。本章将介绍一些常用的DSL查询语句和查询方式。
3.1 查询DSL简介
查询DSL是Elasticsearch提供的一种灵活、强大的查询语言,它以JSON格式表示,可以通过HTTP请求发送给Elasticsearch进行搜索。DSL查询语句由查询子句(query clauses)组成,每个查询子句用于指定不同的查询条件。常见的查询子句有match
、term
、range
等。
查询DSL的结构示例:
{
"query": {
"match": {
"title": "elasticsearch"
}
}
}
在上面的示例中,query
是查询子句的包装器,match
是具体的查询类型,title
是要搜索的字段名,而elasticsearch
是要搜索的关键字。
3.2 查询与过滤器的区别与选择
在DSL查询中,有两种主要的查询类型:查询(query)和过滤器(filter)。虽然它们在功能上有些类似,但在使用时应根据不同的需求进行选择。
- 查询(query):查询会影响文档的相关性评分,即根据查询条件计算文档的匹配程度,相关性较高的文档会排名靠前。查询常用于全文搜索或需要对文档进行评分排序的场景。
- 过滤器(filter):过滤器不会影响评分,它只是根据条件筛选文档,将满足条件的文档返回。过滤器性能较高,适用于需要快速检索和过滤大量文档的场景。
选择使用查询还是过滤器取决于您的搜索需求和性能要求。如果您需要对搜索结果进行相关性排序,并且可以接受稍微降低性能的代价,可以选择查询。如果您只需要根据条件过滤文档,而不关心评分排序,那么过滤器是更合适的选择。
3.3 基本查询语句
最简单的查询是通过发送一个简单的关键字查询来实现的。常用的基本查询有match
、term
和exists
等。
3.3.1 match
查询
match
查询用于执行全文搜索,它会将查询字符串分词后与字段中的词进行匹配。默认情况下,match
查询使用的是OR
逻辑,只要文档中包含一个查询词,就会被视为匹配。
示例:搜索标题字段中包含关键字"elasticsearch"的文档
GET /my_index/_search
{
"query": {
"match": {
"title": "elasticsearch"
}
}
}
3.3.2 term
查询
term
查询用于搜索字段中包含指定词条的文档,它不会对查询字符串进行分词,而是进行精确匹配。
示例:搜索分类字段(category)为"technology"的文档
GET /my_index/_search
{
"query": {
"term": {
"category": "technology"
}
}
}
3.3.3 exists
查询
exists
查询用于搜索包含指定字段的文档。它不关心字段中的具体值,只要字段存在,就会被视为匹配。
示例:搜索包含字段"author"的文档
GET /my_index/_search
{
"query": {
"exists": {
"field": "author"
}
}
}
在本节中,我们介绍了查询DSL的基本概念和常用的基本查询语句。这些查询语句是构建更复杂查询的基础,您可以根据实际需求进行组合和扩展。在接下来的节目中,我们将学习更高级的查询方式,如布尔查询、范围查询和复合查询等。
3.4 布尔查询语句
布尔查询允许将多个查询子句组合在一起,以构建更复杂的查询逻辑。布尔查询可以包含must
、should
和must_not
子句,分别对应于AND、OR和NOT逻辑。
示例:搜索同时包含关键字"elasticsearch"和"tutorial"的文档
GET /my_index/_search
{
"query": {
"bool": {
"must": [
{ "match": { "content": "elasticsearch" } },
{ "match": { "content": "tutorial" } }
]
}
}
}
3.5 范围查询语句
范围查询用于搜索字段值在一定范围内的文档。范围查询可以用于数值、日期等类型的字段。
3.5.1 数值范围查询
示例:搜索字段"price"在100到200之间的文档
GET /my_index/_search
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 200
}
}
}
}
3.5.2 日期范围查询
示例:搜索字段"created_at"在2023年1月1日到2023年6月30日之间的文档
GET /my_index/_search
{
"query": {
"range": {
"created_at": {
"gte": "2023-01-01",
"lte": "2023-06-30"
}
}
}
}
3.6 字段匹配查询语句
字段匹配查询用于搜索包含指定词条的文档,并且可以指定查询的字段和查询方式。
3.6.1 match_phrase
查询
match_phrase
查询要求查询词条必须在文档中以完整的顺序出现。该查询通常用于短语匹配。
示例:搜索字段"content"中包含短语"full-text search"的文档
GET /my_index/_search
{
"query": {
"match_phrase": {
"content": "full-text search"
}
}
}
3.6.2 prefix
查询
prefix
查询用于搜索字段中以指定前缀开头的文档。
示例:搜索字段"title"以"Elastic"开头的文档
GET /my_index/_search
{
"query": {
"prefix": {
"title": "Elastic"
}
}
}
3.6.3 wildcard
查询
wildcard
查询允许使用通配符来搜索字段中匹配模式的文档。其中*
表示任意字符序列,?
表示任意单个字符。
示例:搜索字段"keyword"中以"search*"开头的文档
GET /my_index/_search
{
"query": {
"wildcard": {
"keyword": "search*"
}
}
}
在本节中,我们介绍了更高级的查询语句,包括布尔查询、范围查询和字段匹配查询。这些查询语句能够满足更复杂的搜索需求,帮助您更精准地找到所需的文档。在接下来的节目中,我们将继续探讨其他类型的查询语句,如模糊查询、复合查询和聚合查询等。
3.7 模糊查询语句
模糊查询允许在搜索时忽略词条的拼写错误,通过设置模糊度(fuzziness)来容忍拼写错误。模糊查询常用于处理用户输入错误或搜索建议。
3.7.1 match
查询的模糊查询
在match
查询中使用fuzziness
参数来实现模糊查询。模糊度的取值可以是一个数字,表示允许的最大编辑距离,也可以是"auto",由Elasticsearch自动确定最佳模糊度。
示例:搜索字段"content"中包含"elastcsearch"(拼写错误的"elasticsearch")的文档,允许最大编辑距离为2
GET /my_index/_search
{
"query": {
"match": {
"content": {
"query": "elastcsearch",
"fuzziness": 2
}
}
}
}
3.7.2 fuzzy
查询
fuzzy
查询是一种独立的模糊查询类型,它可以用于任何支持文本的字段。
示例:搜索字段"title"中包含"elastcsearch"(拼写错误的"elasticsearch")的文档,允许最大编辑距离为1
GET /my_index/_search
{
"query": {
"fuzzy": {
"title": {
"value": "elastcsearch",
"fuzziness": "1"
}
}
}
}
3.8 复合查询语句
复合查询允许将多个查询子句组合在一起,以构建更复杂的查询逻辑。复合查询可以包含bool
、constant_score
等。
3.8.1 bool
查询
bool
查询是一种常用的复合查询类型,它可以包含多个must
、should
和must_not
子句,用于实现更复杂的查询逻辑。
示例:搜索同时包含关键字"elasticsearch"和"tutorial"的文档,并且字段"category"为"technology"或"education"的文档
GET /my_index/_search
{
"query": {
"bool": {
"must": [
{ "match": { "content": "elasticsearch" } },
{ "match": { "content": "tutorial" } }
],
"filter": [
{ "terms": { "category": ["technology", "education"] } }
]
}
}
}
3.9 聚合查询语句
聚合查询用于对搜索结果进行统计分析,以便得到有关数据的信息,如最大值、最小值、平均值、总和、分组统计等。聚合查询是Elasticsearch的一个强大功能,它可以用于数据挖掘、统计分析和可视化等场景。
在Elasticsearch中,聚合查询通过使用aggs
(或aggregations
)来指定一个或多个聚合操作。聚合操作由聚合类型(aggregation type)和字段组成,每个聚合类型用于执行不同的统计分析操作。
下面是一些常用的聚合类型:
3.9.1 terms
聚合
terms
聚合用于对字段进行分组统计,并计算每个分组的文档数。它类似于SQL中的GROUP BY语句。
示例:按照"category"字段进行分组统计,并计算每个分类的文档数
GET /my_index/_search
{
"size": 0,
"aggs": {
"category_count": {
"terms": {
"field": "category"
}
}
}
}
3.9.2 sum
聚合
sum
聚合用于计算指定字段的数值总和。
示例:计算"price"字段的总和
GET /my_index/_search
{
"size": 0,
"aggs": {
"total_price": {
"sum": {
"field": "price"
}
}
}
}
3.9.3 avg
聚合
avg
聚合用于计算指定字段的数值平均值。
示例:计算"rating"字段的平均值
GET /my_index/_search
{
"size": 0,
"aggs": {
"avg_rating": {
"avg": {
"field": "rating"
}
}
}
}
3.9.4 min
和max
聚合
min
聚合用于计算指定字段的最小值,max
聚合用于计算指定字段的最大值。
示例:计算"price"字段的最小值和最大值
GET /my_index/_search
{
"size": 0,
"aggs": {
"min_price": {
"min": {
"field": "price"
}
},
"max_price": {
"max": {
"field": "price"
}
}
}
}
3.9.5 date_histogram
聚合
date_histogram
聚合用于按照日期字段进行分组统计,并指定一个时间间隔,计算每个时间间隔内的文档数。
示例:按照"created_at"字段进行每月分组统计,并计算每月的文档数
GET /my_index/_search
{
"size": 0,
"aggs": {
"monthly_stats": {
"date_histogram": {
"field": "created_at",
"calendar_interval": "month"
}
}
}
}
以上只是一些常用的聚合类型示例,实际上,Elasticsearch还提供了许多其他类型的聚合,如cardinality
(基数)、extended_stats
(扩展统计)、percentiles
(百分位数)等。通过合理组合这些聚合类型,您可以根据实际需求获取所需的统计分析结果。
聚合查询是Elasticsearch强大的数据分析工具,在数据挖掘、可视化等应用中具有广泛的应用场景。通过本节的介绍,您已经了解了聚合查询的基本使用方法和常用聚合类型。在实际应用中,您可以根据需要组合不同的聚合查询来获得更丰富的数据分析结果。
3.10 地理位置查询语句
地理位置查询用于搜索地理位置附近的文档,它可以根据经纬度进行搜索。
示例:搜索距离坐标(40.7128, -74.0060)为50公里范围内的文档
GET /my_index/_search
{
"query": {
"geo_distance": {
"distance": "50km",
"location": {
"lat": 40.7128,
"lon": -74.0060
}
}
}
}
在本章中,我们介绍了DSL查询语句的基本概念和使用方法。您已经学会了基本查询、布尔查询、范围查询、字段匹配查询等常用查询语句的使用。同时,您还了解了复合查询、聚合查询和地理位置查询等高级查询技巧。通过合理使用这些查询语句,您可以更轻松地找到所需的文档和信息。在接下来的章节中,我们将继续学习其他类型的查询和高级搜索技巧。
第四章:Dismax算法
Dismax算法在Elasticsearch中也是一种重要的查询处理算法,它是基于Lucene查询语法的扩展查询方式,用于优化用户的搜索体验和搜索结果的相关性。本章将介绍Dismax查询在Elasticsearch中的概念、特点、语法与参数,以及如何使用Dismax查询来优化搜索结果。同时,我们还将分享一些Dismax查询的实际应用案例。
4.1 Dismax查询的概念与特点
Dismax查询是一种用户友好的查询方式,它简化了用户使用Elasticsearch进行搜索的操作。Dismax查询的主要特点包括:
4.2 Dismax查询语法与参数
在Elasticsearch中,Dismax查询是通过使用"query_string"查询来实现的,其基本格式如下:
GET /index/_search
{
"query": {
"query_string": {
"query": "user_input",
"fields": ["field1^boost1", "field2^boost2"],
"default_operator": "AND",
"minimum_should_match": "2