Elasticsearch自定义分词器:搜索与插入场景下的应用

在处理中文等复杂语言的搜索时,Elasticsearch的分词器起着至关重要的作用。Elasticsearch允许我们自定义分词器,以满足特定的索引和搜索需求。有时,我们在插入数据时使用一种分词策略,而在搜索时使用另一种,以优化性能和搜索结果的相关性。本文将介绍如何在Elasticsearch中创建自定义分词器,并在插入和搜索时使用不同的分词器。

自定义分词器的基本概念

在Elasticsearch中,分词器(Analyzer)由以下三个主要部分组成:

  1. Character Filters(字符过滤器):在Tokenizer之前对文本进行处理。
  2. Tokenizer(分词器):将文本切分成词条。
  3. Token Filters(词条过滤器):对Tokenizer输出的词条进行进一步处理。

环境准备

确保您已经安装了Elasticsearch,并且对Elasticsearch的基本操作和分词器有一定的了解。

创建自定义分词器

我们将创建一个自定义分词器my_analyzer,它在索引时使用ik_max_word tokenizer和pinyin filter,而在搜索时使用ik_smart tokenizer。

定义索引和分词器

json 复制代码
PUT /test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "ik_max_word",
          "filter": ["pinyin"]
        }
      },
      "filter": {
        "pinyin": {
          "type": "pinyin",
          "keep_first_letter": true
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "my_analyzer",
        "search_analyzer": "ik_smart"
      }
    }
  }
}

插入数据示例

使用自定义分词器my_analyzer插入数据:

json 复制代码
POST /test/_doc/1
{
  "id": 1,
  "name": "狮子"
}

POST /test/_doc/2
{
  "id": 2,
  "name": "虱子"
}

搜索数据示例

使用ik_smart分词器搜索包含"掉入狮子笼咋办"的数据:

json 复制代码
GET /test/_search
{
  "query": {
    "match": {
      "name": "掉入狮子笼咋办"
    }
  }
}

结语

通过自定义分词器,我们可以更灵活地控制Elasticsearch的索引和搜索行为。在本例中,我们创建了一个自定义分词器my_analyzer,它在索引时使用ik_max_word tokenizer和pinyin filter进行分词,并在搜索时使用ik_smart tokenizer。这种方法可以提高搜索的灵活性和准确性,尤其是在处理中文等需要复杂分词逻辑的语言时。

希望本文能帮助您了解如何在Elasticsearch中创建和使用自定义分词器,以及如何在不同的搜索和插入场景下应用不同的分词策略。

相关推荐
洛森唛12 小时前
Elasticsearch DSL 查询语法大全:从入门到精通
后端·elasticsearch
字节跳动数据平台17 小时前
代码量减少 70%、GPU 利用率达 95%:火山引擎多模态数据湖如何释放模思智能的算法生产力
大数据
得物技术18 小时前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
武子康20 小时前
大数据-238 离线数仓 - 广告业务 Hive分析实战:ADS 点击率、购买率与 Top100 排名避坑
大数据·后端·apache hive
武子康2 天前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive
大大大大晴天2 天前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
Elasticsearch3 天前
如何使用 Agent Builder 排查 Kubernetes Pod 重启和 OOMKilled 事件
elasticsearch
Elasticsearch4 天前
通用表达式语言 ( CEL ): CEL 输入如何改进 Elastic Agent 集成中的数据收集
elasticsearch
武子康4 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
武子康5 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive