Elasticsearch分词器基础安装

简介

Elasticsearch (ES) 是一个基于 Lucene 的搜索引擎,分词器是其核心组件之一,负责对文本数据进行分析和处理。

java 复制代码
1. 文本分析
分词器将输入的文本拆分成一个个单独的词(tokens),以便后续的索引和搜索。例如,输入的文本 "Elasticsearch分词器" 可能会被分词器拆分为 ["Elasticsearch", "分词器"]。

2. 索引优化
在将文档存储到 Elasticsearch 中之前,分词器可以去除一些不必要的字符和停用词(如"的"、"是"等),并将文本标准化(例如小写化)。这有助于减少索引的大小和提高搜索效率。

3. 多语言支持
Elasticsearch 支持多种语言的分词器,例如中文分词器、英文分词器等。不同的分词器使用不同的规则和算法来处理特定语言的文本,以便提供更精确的搜索结果。

4. 提升搜索质量
通过有效的分词,分词器可以提高搜索的相关性和准确性。分词器能够识别出用户查询中的关键词,并将其与索引中的词进行匹配,从而提高搜索结果的质量。

5. 分析文本数据
分词器还可以用于分析文本数据的特点,比如词频统计、短语提取等。这对后续的数据挖掘和分析工作非常重要。

6. 自定义分词
Elasticsearch 允许用户自定义分词器,开发者可以根据具体需求定义分词规则和过滤器,以满足特定场景的需求。

7. 创建和配置索引
在创建索引时,可以指定使用的分词器。根据文档类型或应用场景的不同,可以选择不同的分词器来满足需求。

常见的分词器

java 复制代码
Elasticsearch 提供了多种分词器(analyzers)以支持不同类型的文本分析和搜索需求。以下是一些常见的分词器:

1. 标准分词器(Standard Analyzer)
这是 Elasticsearch 默认的分词器,适用于大多数语言。它会将文本分割为单词,并去除停用词(如"的"、"是"等)。

2. 中文分词器
IK Analyzer:一个流行的中文分词插件,支持细粒度和粗粒度两种分词模式,适合处理中文文本。
HanLP:另一种中文分词器,支持多种自然语言处理功能,包括分词、词性标注等。

3. Whitespace 分词器
将输入文本按空白字符进行分词,适合处理不需要复杂分析的情况。

4. Keyword 分词器
将整个输入文本视为一个单一的词,适用于需要精确匹配的场景,如 ID 和特定标签。

5. NGram 分词器
生成输入文本的 N-gram 形式,适合用于模糊搜索和自动补全功能。

6. Path Hierarchy 分词器
适用于处理文件路径和层级结构数据,能够正确分词层级关系。

7. Edge NGram 分词器
仅生成输入文本的前 N 个字符的 N-gram,适合用于前缀匹配的搜索场景。

8. Stop Token 分词器
用于去除常见的停用词,这些词通常不会对搜索结果产生实质性影响。

9. Custom Analyzer
用户可以根据需求自定义分词器,组合不同的分词和过滤器,以满足特定的分析需求。

中文分词器 ik

默认的分词器是标准分词器,它会将文本分割为单词,并去除停用词(如"的"、"是"等),在生产实际使用过程中,是不符合国内的业务的

所以我们需要引入中文分词器 ik

  • IK Analyzer:一个流行的中文分词插件,支持细粒度和粗粒度两种分词模式,适合处理中文文本。

安装步骤

注意:安装的版本需要跟es的版本保持一致,我这里使用的7.3.2的

下载

  • 方式一:如果需要的ik是7.3.2 ,否则可以选择其他的方式
  • 公众号获取,回复ik<font style="color:rgb(26, 27, 28);">分词器</font>
  • 方式二:github下载

https://github.com/infinilabs/analysis-ik/tags

找到自己需要的版本

例如我需要下载v7.3.2

下载zip的方式

上传,解压

shell 复制代码
# 切换到es下的plugins 这里根据自己es的安装目录
cd elasticsearch-7.3.2/plugins
# 上传
rz
# 解压
unzip elasticsearch-analysis-ik-7.3.2.zip -d ik
# 删除压缩包,否则启动会报错
rm -rf elasticsearch-analysis-ik-7.3.2.zip

重启es

  • ps -ef|grep elasticsearch 查看es的pid
  • 杀死程序 kill -9 pid
  • 进入es的bin目录,执行 ./elasticsearch -d

分词测试

使用kibana进行查看

  • 标准分词器测试
shell 复制代码
POST /_analyze
{
  "tokenizer": "standard",  
  "text": "Elasticsearch分词器测试"
}
  • ik分词器测试
shell 复制代码
POST /_analyze
{
  "tokenizer": "ik_max_word",
  "text": "Elasticsearch分词器测试"
}

可以看出二者的区别

相关推荐
智者知已应修善业8 小时前
【输入两个数字,判断两数相乘是否等于各自逆序数相乘】2023-10-24
c语言·c++·经验分享·笔记·算法·1024程序员节
CoderYanger18 小时前
动态规划算法-子数组、子串系列(数组中连续的一段):21.乘积最大子数组
开发语言·算法·leetcode·职场和发展·动态规划·1024程序员节
CoderYanger18 小时前
A.每日一题——3432. 统计元素和差值为偶数的分区方案
java·数据结构·算法·leetcode·1024程序员节
CoderYanger19 小时前
动态规划算法-子数组、子串系列(数组中连续的一段):26.环绕字符串中唯一的子字符串
java·算法·leetcode·动态规划·1024程序员节
韩家阿杰2 天前
RabbitMQ技术的使用
1024程序员节
CoderYanger3 天前
动态规划算法-简单多状态dp问题:15.买卖股票的最佳时机含冷冻期
开发语言·算法·leetcode·动态规划·1024程序员节
CoderYanger3 天前
递归、搜索与回溯-FloodFill:33.太平洋大西洋水流问题
java·算法·leetcode·1024程序员节
CoderYanger3 天前
动态规划算法-斐波那契数列模型:2.三步问题
开发语言·算法·leetcode·面试·职场和发展·动态规划·1024程序员节
CoderYanger3 天前
动态规划算法-简单多状态dp问题:16.买卖股票的最佳时机含手续费
开发语言·算法·leetcode·动态规划·1024程序员节
CoderYanger3 天前
C.滑动窗口-求子数组个数-越短越合法——3258. 统计满足 K 约束的子字符串数量 I
java·开发语言·算法·leetcode·1024程序员节