在前面我们介绍了Elasticsearch的查询,也提到了使用text类型的字段会被分词。这批文章我们介绍下分词器的原理。
在Elasticsearch中分词器是非常重要的一部分,它把整个文本进行相关的分词,然后elasticsearch根据分词结果组成倒排索引,再通过倒排索引进行搜索。那么分词器是如何分词的呢,下面看一张图:
从上图可以看到如下的流程:
1、原始文本被传入到elasticsearch中 2、分词器首先把一些无用的字符或者符号通过字符过滤器给过滤掉,无用的字符包含各种标点符号 3、然后把字符过滤器过滤后的字符按照一定的算法进行分词,也就是切分分词。(英文的分词规律是按照空格进行分词,中文会比较复杂) 4、上一步把语句分成了一个个词组,此时这些词组对于我们来说有一些词组是无意义的,例如:和、的等等这些中文的词没有太大意义,此时就会被分词过滤器给过滤掉(停词)或者转换掉(同义词) 5、把最终的分词词组集合传入给elasticsearch建立倒排索引。
以上的流程就是分词器的分词原理。
备注:
1、第二步的字符过滤器主要是过滤标点符号,例如:逗号、句号、省略号等一切的标点符号。
2、中文和英文的分词算法是不一致的,英文在所有的分词器中几乎都是按照空格分词,中文的分词较为复杂,各厂家提供的开源分词器的分词结果也是不一致的。
3、第四步里面首先会涉及到停词,也就是我们常见的:a、and、the、的、和、与 等等。当然几乎所有的分词器都可以自定义停词,所有的停词都不会纳入索引中,所以也不能被搜索出来。
4、同义词这块主要是同义词转义,属于各个分词器的自定义功能,不是所有的分词器都有同义词的。
还没有评论,来说两句吧...