Elasticsearch搜索中文分词优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch搜索中文分词优化相关的知识,希望对你有一定的参考价值。

参考技术A Elasticsearch 中文搜索时遇到几个问题:

接下来从以下几点讲一下怎么ES中文分词

索引时,为了提供索引的覆盖范围,通常会采用ik_max_word分析器,会以最细粒度分词索引,搜索时为了提高搜索准确度,会采用ik_smart分析器,会以粗粒度分词
字段mapping设置如下:

analysis索引分析模块充当analyzer分析器的可配置注册表,通过analyzer对文档索引阶段的字段和搜索String进行处理,自定义analyzer时,通常需要character filter tokenizer token filters来完成

首先字符串经过过滤器(character filter),他们的工作是在分词前处理字符串。字符过滤器能够去除html标记,例如把“<a>”变成“a

英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词

最后,每个词都通过所有表征过滤(token filters),他可以修改词(例如将“Quick”转为小写),去掉词(例如停用词像“a”、“and”、“the”等等),或者增加词(例如同义词像“a”、“and”、“the”等等)或者增加词(例如同义词像“jump”和“leap”)。

character filter-->>tokenizer-->>token filters

官网example:

通常为了保证索引时覆盖度和搜索时准确度,索引分词器采用ik_max_word,搜索分析器采用ik_smart模式

因为倒排索引中的数据是索引时由分词器来处理的,如果分词器有变化,那么搜索时query关键词即使和doc中关键词相同,但是因为分词器的原因,分出来的词会出现不匹配的情况,因此当mapping或者分词器字典同义词词典等发生变化时,需要reindex索引数据

2.1 建议同义词词典

自定义添加同义词通过ik分词器

想查看同义词效果或者测试分词效果

suggest词需要对拼音前缀,全拼,中文进行前缀匹配,例如:“百度”一词,键入"baidu","bd","百"都必须匹配到,因此在索引的时候需要一词分多个分词器来索引保存,中文采用单字分词,拼音首字母和全拼需要自定义analyzer来索引。

部分内容有待完善

以上是关于Elasticsearch搜索中文分词优化的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch搜索中文分词优化

elasticsearch中文搜索优化

Elasticsearch使用指南之初始环境搭建

配置elasticsearch 以及ik分词

ElasticSearch中文索引优化问题

Elasticsearch5.1.1+ik分词器安装小记