トークングラフ
テキストをトークンのストリームに変換する際、トークナイザーは次の情報も記録します:
- ストリーム内の各トークンの
position
- トークンが跨る位置の数
positionLength
これらを使用して、ストリームのためのトークングラフと呼ばれる有向非巡回グラフを作成できます。トークングラフでは、各位置がノードを表します。各トークンは、次の位置を指すエッジまたはアークを表します。
同義語
一部のトークンフィルターは、既存のトークンストリームに同義語のような新しいトークンを追加できます。これらの同義語は、既存のトークンと同じ位置を跨ぐことがよくあります。
次のグラフでは、quick
とその同義語fast
はどちらも0
の位置を持っています。彼らは同じ位置を跨いでいます。
複数位置のトークン
一部のトークンフィルターは、複数の位置を跨ぐトークンを追加できます。これには、「atm」を「自動預け払い機」の同義語として使用するような、複数の単語の同義語のトークンが含まれることがあります。
しかし、グラフトークンフィルターとして知られる一部のトークンフィルターのみが、複数位置のトークンのpositionLength
を正確に記録します。これらのフィルターには次が含まれます:
一部のトークナイザー、例えばnori_tokenizer
は、複合トークンを複数位置のトークンに正確に分解します。
次のグラフでは、domain name system
とその同義語dns
はどちらも0
の位置を持っています。しかし、dns
はpositionLength
の3
を持っています。グラフ内の他のトークンは、デフォルトのpositionLength
が1
です。
検索のためのトークングラフの使用
インデクシングはpositionLength
属性を無視し、複数位置のトークンを含むトークングラフをサポートしません。
しかし、match
やmatch_phrase
のようなクエリは、これらのグラフを使用して単一のクエリ文字列から複数のサブクエリを生成できます。
例
ユーザーが[match_phrase
]クエリを使用して次のフレーズを検索します:
domain name system is fragile
検索分析中に、dns
、domain name system
の同義語がクエリ文字列のトークンストリームに追加されます。dns
トークンはpositionLength
の3
を持っています。
#### テキスト
``````text
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
を持っており、無効なグラフが生成されます。
無効なトークングラフを検索に使用しないでください。無効なグラフは予期しない検索結果を引き起こす可能性があります。