即使是不成熟的尝试,也胜于胎死腹中的策略。

elasticsearch-analysis-pinyin 作为 analyzer, tokenizer, token-filter 有什么区别?工作流程如何?

Elasticsearch | 作者 tygcs | 发布于2018年10月22日 | 阅读数:2907

萌新小白求问,
 
elasticsearch-analysis-pinyin 可以作为 analyzer, tokenizer, token-filter 使用,这里tokenizer是拼音分词比较好理解,
 
analyzer和token-filter有什么区别,分别在什么场景使用呢?
 
比如我现在想用拼音搜索,应该用哪种呢?从底层来看,analyzer和token-filter的工作流程是怎样的呢?尤其是token-filter,不是很理解作为filter是怎样作用的?
 
我的疑问是,filter是在索引分词阶段就会使用,还是到query的时候才会使用呢?
比如我之前配置过同义词的filter,我理解是在query阶段对输入的keyword进行分词后,filter开始作用,对每个词找是否有对应同义词,然后进行搜索。
但现在我想配置的这个pinyin filter,我理解是index阶段需要使用,为了把分的词转换成拼音存储(不是很清楚是把所有字段都重新再用一个field存储还是怎样?),query阶段也需要使用,需要把输入的keyword转换成拼音,然后再搜索(不知道是怎么搜索到字段的拼音的?),filter的大概处理流程是这样吗?

谢谢各位大佬解答。
已邀请:

rochy - rochy_he

赞同来自:

analyzer = 1 个 tokenizer + 若干个 token-filter
tokenizer 主要是用作分词器
token-filter 是作为过滤器
 
analyzer 是可以直接使用无需配置的,即你在 mapping 部分的 analyze 可以直接写 analyzer 对应的值,表示使用这一种分析器;
tokenizer 一般在配置 custom 类型的 analysis 的时候会用到
token-filter 过滤器就是对 term 级别的内容再做一层处理,例如:中华人民,经过 tokenizer 分词后,分词结果为:中国/人民;这个时候你使用过滤器则过滤器会分别作用在 “中国”、“人民”这两个词语上,而不是“中华人民”这句话
 
 

hapjin

赞同来自:

Analyzer应该位于"最高层":


An Analyzer builds TokenStreams, which analyze text. It thus represents a 
policy for extracting index terms from text.


Analyzer采用某种Tokenizer把文本(text)变成token:


 A Tokenizer is a TokenStream and is responsible for breaking up incoming text into tokens. In many cases, an Analyzer will use a Tokenizer as the first step in the analysis process


Filter有2种类型:一种是char filter,另一种是 TokenFilter ,它们作用的时机是不一样的:
  •  CharFilter extends Reader to transform the text before it is tokenized(我的理解:比如在分词之前把text中存在的各种各样的emoji字符给去掉了)
  • A TokenFilter is a TokenStream and is responsible for modifying tokens that have been created by the Tokenizer(比如词干还原(stemming)、同义词归一化)

 参考链接:lucene analysishttp://lucene.apache.org/core/ ... ption
 
另外发现社区上这篇文章:Elasticsearch: analyzer 教程也不错。

要回复问题请先登录注册