https://blog.csdn.net/weixin_43197795/article/details/108209111
Elasticsearch把每条数据叫做Document,然后提交到Index中。
简单说,Document中的数据是如何转变成倒排索引的,以及查询语句是如何转换成一个个词(Term)使高效率文本搜索变得可行,这种转换数据的过程就称为文本分析(analysis)。
analysis(文本分析)基本概念
elasticsearch全文搜索引擎会用某种算法(Tokenizer)对要建索引的文档进行分析,从文档中提取若干Token(词元),这些算法称为Tokenizer(分词器),这些Token会被进一步处理,比如转成小写等,这些进一步的处理算法被称为Filter(过滤器),被处理后的结果被称为Term(词),文档中包含了几个这样的Term被称为Frequency(词频)。引擎会建立Term和原文档的
Inverted Index(倒排索引),这样就能根据Term很快找到源文档了。
文本分析(analysis)工作由analyzer(分析器)组建负责。analyzer由一个分词器(tokenzier)和0个或多个过滤器(filter)组成,也可能会有0个或多个字符映射器(character mappers)组成。
tokenizer
用来把文本拆分成一个个的Token。Token包含了比较多的信息,比如Term在文本中的位置及Term原始文本,以及Term的长度。文本经过tokenizer处理后的结果称为token stream。token stream 其实就是一个个Token的顺序排列。token stream将等待着filter来处理。
filter链将用来处理Token Stream 中的每一个token。这些处理方式包括删除Token,改变Token,甚至添加新的Token。比如变小写,去掉里面的HTML标记,这些处理的算法被称为Character Filter(字符过滤器),Elasticsearch中内置了许多filter,读者也可以轻松地自己实现一个filter。
我们来看我们的例子:
{"settings":{"analysis":{"filter":{"autocomplete_filter":{"type":"edge_ngram","min_gram":1,"max_gram":20}}},"analyzer":{"autocomplete":{"type":"custom","tokenzier":"standard","filter":{"lowercase","autocomplete_filter"}}}}}
首先是定义analysis(文本分析),其中我们先定义了一个文本处理的filter->autocompletefilter,然后定义analyzer(分析器),分析器由tokenzier(分词器)和两个过滤器组成,tokenzier用标准的,filter中一个是内置的lowercase,一个是我们上面定义的autocompletefilter,这下就清楚了吧。
