新手想学习elasticsearch开发,本文将带你快速学习ES dismax查询和自动补全查询

2023年 7月 19日 20.0k 0

《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中扮演着至关重要的角色,它们可以用于以下目的:

  • 提供新的分析器(Analyzer):分析器用于将文本内容进行分词和处理,以便能够更好地进行全文检索。不同的语言和应用场景可能需要不同的分析器,而插件可以为Elasticsearch增加各种自定义的分析器。
  • 支持新的数据类型:Elasticsearch默认支持常见的数据类型,如文本、数字、日期等。但有时候我们可能需要扩展数据类型,例如IP地址、地理坐标等。插件可以让我们支持更多的数据类型,以满足特定业务需求。
  • 引入新的查询类型:除了基本的全文搜索,Elasticsearch还支持各种查询类型,如模糊搜索、范围搜索、布尔搜索等。插件可以引入新的查询类型,让我们能够更灵活地查询数据。
  • 集成第三方工具和服务:插件可以用于将Elasticsearch与其他系统或服务集成,实现更复杂的功能和应用场景。
  • 2.1.2 插件类型

    根据功能和用途的不同,Elasticsearch的插件可以分为以下几类:

  • 分析器插件:用于提供新的分析器,以支持不同语言的全文搜索和文本处理。
  • 索引插件:用于扩展索引功能,如支持新的数据类型或定制索引行为。
  • 查询插件:引入新的查询类型或优化现有查询的性能。
  • 脚本插件:提供新的脚本语言或优化脚本执行效率。
  • 其他功能插件:包括监控插件、安全插件等,用于增强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插件目录。在解压缩后的目录结构中,您会看到类似如下的文件和文件夹:
  • elasticsearch/
    |-- plugins/
    |   |-- analysis-ik/
    |       |-- config/
    |       |-- lib/
    |       |-- plugin-descriptor.properties
    |       |-- README.md
    
  • 创建插件目录:在Elasticsearch安装目录下的plugins文件夹中创建一个新的文件夹,命名为"analysis-ik"。
  • 复制插件文件:将解压后的插件文件复制到新创建的"analysis-ik"文件夹中。
  • 启动Elasticsearch:启动Elasticsearch服务,插件将会被自动加载。
  • 启动成功后,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插件目录。在解压缩后的目录结构中,您会看到类似如下的文件和文件夹:
  • elasticsearch/
    |-- plugins/
    |   |-- analysis-pinyin/
    |       |-- config/
    |       |-- lib/
    |       |-- plugin-descriptor.properties
    |       |-- README.md
    
  • 创建插件目录:在Elasticsearch安装目录下的plugins文件夹中创建一个新的文件夹,命名为"analysis-pinyin"。
  • 复制插件文件:将解压后的插件文件复制到新创建的"analysis-pinyin"文件夹中。
  • 启动Elasticsearch:启动Elasticsearch服务,插件将会被自动加载。
  • 启动成功后,拼音插件就已经成功安装并可用了。

    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插件目录。在解压缩后的目录结构中,您会看到类似如下的文件和文件夹:
  • elasticsearch/
    |-- plugins/
    |   |-- analysis-stconvert/
    |       |-- config/
    |       |-- lib/
    |       |-- plugin-descriptor.properties
    |       |-- README.md
    
  • 创建插件目录:在Elasticsearch安装目录下的plugins文件夹中创建一个新的文件夹,命名为"analysis-stconvert"。
  • 复制插件文件:将解压后的插件文件复制到新创建的"analysis-stconvert"文件夹中。
  • 启动Elasticsearch:启动Elasticsearch服务,插件将会被自动加载。
  • 启动成功后,简繁体转换插件就已经成功安装并可用了。

    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插件目录。在解压缩后的目录结构中,您会看到类似如下的文件和文件夹:
  • elasticsearch/
    |-- plugins/
    |   |-- analysis-synonym/
    |       |-- config/
    |       |-- lib/
    |       |-- plugin-descriptor.properties
    |       |-- README.md
    
  • 创建插件目录:在Elasticsearch安装目录下的plugins文件夹中创建一个新的文件夹,命名为"analysis-synonym"。
  • 复制插件文件:将解压后的插件文件复制到新创建的"analysis-synonym"文件夹中。
  • 配置同义词文件:在"config"文件夹中创建一个名为"synonyms.txt"的文件,用于存储同义词的配置。
  • 编辑同义词文件:打开"synonyms.txt"文件,并在文件中添加同义词配置。每行一个同义词组,用逗号分隔,例如:
  • 快速,迅速,快捷
    搜索,查询,检索
    
  • 启动Elasticsearch:启动Elasticsearch服务,插件将会被自动加载。
  • 启动成功后,同义词插件就已经成功安装并可用了。

    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)组成,每个查询子句用于指定不同的查询条件。常见的查询子句有matchtermrange等。

    查询DSL的结构示例:

    {
      "query": {
        "match": {
          "title": "elasticsearch"
        }
      }
    }
    

    在上面的示例中,query是查询子句的包装器,match是具体的查询类型,title是要搜索的字段名,而elasticsearch是要搜索的关键字。

    3.2 查询与过滤器的区别与选择

    在DSL查询中,有两种主要的查询类型:查询(query)和过滤器(filter)。虽然它们在功能上有些类似,但在使用时应根据不同的需求进行选择。

    • 查询(query):查询会影响文档的相关性评分,即根据查询条件计算文档的匹配程度,相关性较高的文档会排名靠前。查询常用于全文搜索或需要对文档进行评分排序的场景。
    • 过滤器(filter):过滤器不会影响评分,它只是根据条件筛选文档,将满足条件的文档返回。过滤器性能较高,适用于需要快速检索和过滤大量文档的场景。

    选择使用查询还是过滤器取决于您的搜索需求和性能要求。如果您需要对搜索结果进行相关性排序,并且可以接受稍微降低性能的代价,可以选择查询。如果您只需要根据条件过滤文档,而不关心评分排序,那么过滤器是更合适的选择。

    3.3 基本查询语句

    最简单的查询是通过发送一个简单的关键字查询来实现的。常用的基本查询有matchtermexists等。

    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 布尔查询语句

    布尔查询允许将多个查询子句组合在一起,以构建更复杂的查询逻辑。布尔查询可以包含mustshouldmust_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 复合查询语句

    复合查询允许将多个查询子句组合在一起,以构建更复杂的查询逻辑。复合查询可以包含boolconstant_score等。

    3.8.1 bool查询

    bool查询是一种常用的复合查询类型,它可以包含多个mustshouldmust_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 minmax聚合

    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查询的主要特点包括:

  • 简化查询语法: Dismax查询允许用户使用更加简洁的查询语法,无需了解复杂的Lucene查询语法,降低了用户的学习成本和使用难度。
  • 字段加权: Dismax查询支持对不同字段设置权重,让某些字段对搜索结果的得分产生更大的影响,从而提高搜索结果的排序准确性。
  • 默认字段: Dismax查询可以指定默认搜索字段,当用户没有指定搜索字段时,会自动使用默认字段进行搜索,提高了搜索的便捷性。
  • 最大查询解析: 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

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论