EdgeNGramTokenizer与EdgeNGramTokenFilterV2差异及技术问题咨询
问题答复
1. 两者的差异判定
你描述的作用阶段差异是成立的,但这不是唯一差异,是所有其他行为差异的根源:
EdgeNGramTokenizer属于分词器组件,执行节点在所有CharFilter处理完成后,直接接收经过字符预处理的原始文本,从文本起始位置按配置的min_gram、max_gram参数切分生成前缀N元片段,切分逻辑完全不依赖上游分词结果。EdgeNGramTokenFilterV2属于词项过滤组件,执行节点在分词器运行完成后,输入是分词器输出的初始token列表,针对每一个输入的单独token,从该token的起始位置按配置生成对应的前缀N元片段。
两者其他的行为差异(比如Tokenizer会直接丢弃不符合gram规则的原始文本内容,Filter可通过preserveOriginal参数选择是否保留原始输入token)都是由所处的处理链路位置决定的。
2. TokenFilter的新增词项能力
你的判断是对的,相当一部分TokenFilter的核心作用就是基于已有token生成新的字符串片段,不是只有EdgeNGram类型的Filter有这个能力,常见的同类型组件包括:
NGramTokenFilter:基于输入token生成任意位置的N元片段SynonymGraphFilter:基于输入token匹配同义词典,生成对应的同义词词项WordDelimiterGraphFilter:按照大小写、分隔符等规则拆分组合输入token,生成新的拆分/拼接词项
3. 新生成字符串的属性
这些新生成的字符串完全属于标准定义上的token。在Lucene/Elasticsearch的分析链路中,只要是TokenFilter输出的、携带词项文本、位置偏移、位置增量、payload等标准token属性的单元,都会被当做正式token写入倒排索引,和分词器直接生成的token具备完全同等的效力,会正常参与召回、排序、高亮等全流程检索逻辑。
内容的提问来源于stack exchange,提问作者G Sai Kanth
相关产品推荐
相关产品推荐

