词元图 (Token graphs)
当 分词器(tokenizer) 将文本转换为词元流时,它还会记录以下信息
- 流中每个词元的
position(位置) positionLength,即词元跨越的位置数量
使用这些信息,可以为流创建一个 有向无环图,称为词元图(token graph)。在词元图中,每个位置代表一个节点。每个词元代表一条边或弧,指向下一个位置。
一些 词元过滤器(token filters) 可以将新的词元(如同义词)添加到现有的词元流中。这些同义词通常与现有词元跨越相同的位置。
在下图中,quick 及其同义词 fast 的位置均为 0。它们跨越了相同的位置。
一些词元过滤器可以添加跨越多个位置的词元。这包括多词同义词的词元,例如使用 "atm" 作为 "automatic teller machine" 的同义词。
然而,只有某些称为图词元过滤器(graph token filters)的词元过滤器,才能准确记录多位置词元的 positionLength。这些过滤器包括
一些分词器,例如 nori_tokenizer,也能准确地将复合词元分解为多位置词元。
在下图中,domain name system 及其同义词 dns 的位置均为 0。但是,dns 的 positionLength 为 3。图中的其他词元具有默认的 positionLength 值 1。
索引(Indexing)过程会忽略 positionLength 属性,且不支持包含多位置词元的词元图。
然而,诸如 match 或 match_phrase 查询等查询,可以使用这些图从单个查询字符串生成多个子查询。
示例
用户使用 match_phrase 查询对以下短语进行搜索
domain name system is fragile
在 搜索分析 期间,domain name system 的同义词 dns 会被添加到查询字符串的词元流中。dns 词元的 positionLength 为 3。
match_phrase 查询使用此图为以下短语生成子查询
dns is fragile
domain name system is fragile
这意味着该查询可以匹配包含 dns is fragile 或 domain name system is fragile 的文档。
以下词元过滤器可以添加跨越多个位置的词元,但仅记录默认的 positionLength 为 1
这意味着对于包含此类词元的流,这些过滤器会产生无效的词元图。
在下图中,dns 是 domain name system 的多位置同义词。但是,dns 的 positionLength 值为默认的 1,导致生成的图无效。
避免在搜索中使用无效的词元图。无效的图可能会导致意外的搜索结果。