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的大概处理流程是这样吗?
谢谢各位大佬解答。
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的大概处理流程是这样吗?
谢谢各位大佬解答。
2 个回复
rochy - rochy_he
赞同来自:
tokenizer 主要是用作分词器
token-filter 是作为过滤器
analyzer 是可以直接使用无需配置的,即你在 mapping 部分的 analyze 可以直接写 analyzer 对应的值,表示使用这一种分析器;
tokenizer 一般在配置 custom 类型的 analysis 的时候会用到
token-filter 过滤器就是对 term 级别的内容再做一层处理,例如:中华人民,经过 tokenizer 分词后,分词结果为:中国/人民;这个时候你使用过滤器则过滤器会分别作用在 “中国”、“人民”这两个词语上,而不是“中华人民”这句话
hapjin
赞同来自:
Analyzer采用某种Tokenizer把文本(text)变成token:
Filter有2种类型:一种是char filter,另一种是 TokenFilter ,它们作用的时机是不一样的:
参考链接:lucene analysis(http://lucene.apache.org/core/ ... ption)
另外发现社区上这篇文章:Elasticsearch: analyzer 教程也不错。