赞
踩
在数据的世界里,搜索就像是一位智慧的导航员,它能够帮助我们在海量信息中找到需要的答案。而Elasticsearch,就像是这位导航员的得力助手,它通过强大的文本处理能力,为我们提供了一个高效的搜索引擎。而IK分词器,则是Elasticsearch中的一枚利器,它能够帮助我们实现中文文本的精确分词和搜索。今天,就让我们一起来揭开IK分词器的神秘面纱,探索它在Elasticsearch中的魔法般变身吧!
IK 分词器是一个针对中文文本的开源分词器,特别适用于中文搜索引擎和文本分析领域。它的作用是将中文文本按照一定的规则进行切分,将连续的字符序列划分为具有语义的词语,从而实现中文文本的分词处理。
重要性:
与其他分词器的区别:
IK 分词器的分词原理基于中文文本的规则和词典匹配,主要包括正向最大匹配和逆向最大匹配两种算法。以下是 IK 分词器的基本工作流程:
正向最大匹配(Forward Maximum Matching):
逆向最大匹配(Reverse Maximum Matching):
合并分词结果:
处理未登录词:
总体而言,IK 分词器通过正向最大匹配和逆向最大匹配两种算法来切分中文文本,并结合用户自定义词典进行分词处理,从而实现对中文文本的准确分词。
在 Elasticsearch 中创建索引并配置 IK 分词器,可以通过以下步骤完成:
创建索引: 首先,在 Elasticsearch 中创建一个新的索引,可以使用 Elasticsearch 的 REST API 或者 Kibana 工具进行操作。
配置 IK 分词器: 针对需要进行中文分词的字段,配置相应的 IK 分词器。
下面是一个示例,演示如何使用 Elasticsearch 的 REST API 在创建索引时配置 IK 分词器:
PUT /my_index { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "ik_max_word", // 使用 IK 分词器 ik_max_word "filter": ["my_synonym_filter"] // 可选:添加同义词过滤器 } }, "filter": { "my_synonym_filter": { "type": "synonym", "synonyms_path": "analysis/synonyms.txt" // 同义词文件路径 } } } }, "mappings": { "properties": { "content": { "type": "text", "analyzer": "my_analyzer" // 使用自定义的 IK 分词器 } } } }
在上面的示例中:
my_index
的索引。my_analyzer
的分析器,使用 IK 分词器 ik_max_word
进行分词,并且可以选择添加同义词过滤器。content
字段,并将其配置为使用自定义的 IK 分词器 my_analyzer
进行分词。常见的 IK 分词器配置示例包括:
ik_max_word
:最大化地切分词语,适合搜索应用。ik_smart
:精准地切分词语,适合索引和分析应用。根据实际需求,可以选择合适的 IK 分词器进行配置,并根据需要添加额外的分词器设置,如同义词过滤器等。
docker搭建的Es如果下载ik分词器插件可以执行以下命令,下面的版本要选择你的es版本
docker exec -it your_elasticsearch_container_name /bin/bash -c "elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.3/elasticsearch-analysis-ik-7.16.3.zip"
curl -XPUT "http://localhost:9200/acowbo_new" -H 'Content-Type: application/json' -d ' { "settings": { "analysis": { "analyzer": { "my_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["lowercase"] }, "ik_analyzer": { "type": "custom", "tokenizer": "ik_smart" } } } }, "mappings": { "properties": { "id": { "type": "keyword" }, "searchKey": { "type": "text", "analyzer": "ik_analyzer" }, "searchValue": { "type": "text", "analyzer": "ik_analyzer" }, "typeName": { "type": "text", "analyzer": "my_analyzer" } } } }'
curl -XPOST "http://localhost:9200/_reindex" -H 'Content-Type: application/json' -d '
{
"source": {
"index": "acowbo"
},
"dest": {
"index": "acowbo_new"
}
}'
curl -XDELETE "http://localhost:9200/acowbo"
curl -XPOST "http://localhost:9200/acowbo_new/_alias/acowbo"
Can’t update non dynamic settings [[index.analysis.analyzer.my_analyzer.type, index.analysis.analyzer.my_analyzer.filter, index.analysis.analyzer.ik_analyzer.tokenizer, index.analysis.analyzer.my_analyzer.tokenizer, index.analysis.analyzer.ik_analyzer.type]] for open indices
Elasticsearch不允许直接更新这些非动态设置。
curl -XPOST "http://localhost:9200/acowbo/_close"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。