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