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。

我们来看我们的例子:

  1. {
  2. "settings":{
  3. "analysis":{
  4. "filter":{
  5. "autocomplete_filter":{
  6. "type":"edge_ngram",
  7. "min_gram":1,
  8. "max_gram":20
  9. }
  10. }
  11. },
  12. "analyzer":{
  13. "autocomplete":{
  14. "type":"custom",
  15. "tokenzier":"standard",
  16. "filter":{
  17. "lowercase",
  18. "autocomplete_filter"
  19. }
  20. }
  21. }
  22. }
  23. }

首先是定义analysis(文本分析),其中我们先定义了一个文本处理的filter->autocompletefilter,然后定义analyzer(分析器),分析器由tokenzier(分词器)和两个过滤器组成,tokenzier用标准的,filter中一个是内置的lowercase,一个是我们上面定义的autocompletefilter,这下就清楚了吧。