クエリ内の単語の順列が一致するようにクエリを分析するようにOpen-Searchサーバーを構成する必要があります。opensearchserverトークナイザでクエリ内のすべての単語を並べ替えます。
たとえば、 フィールドのインデックス作成では、「膝の痛み」というフレーズがあります。今私の質問が「人間の膝の痛みを取り除く方法」のようなものなら私は、このクエリが索引付けフィールドに「膝の痛み」を持つ文書を出力することを望みます。
"削除"、 "痛み"、 "人間"、 "膝"、 "痛みの除去"、 "膝の除去"、 "人間の除去"、 "痛みの膝" 「人間の膝」、「膝の痛み」、「人間の痛み」など。それは、「膝の痛み」を一致するように
。 は私がこれを達成するのを助けることができる任意のトークナイザやフィルタがあります。
シングルフィルタ一方向にも連続した単語の組み合わせで動作します。あなたのイメージのような "膝の痛み"が存在しません。また、各トークンに関連付けられている数字が何であるかを示すことができます(角括弧内の数字) –
トークン内の数字は、分析された元の文字列中のその用語の開始および終了文字の位置です。たとえば:remove [7,13 - 1]、その単語は文字列の文字7で始まり、文字位置13で終わります。 " - 1"が何であるか分かりません。シングリングが文字列内の単語のすべての置換を作成するのではなく、隣接する単語のみを作成することは本当です。しかし、隣接しない単語マッチングはluceneのスコアリングによって処理されます。 shingleフィルタは、隣接する単語フレーズマッチングのスコアが高くなります。これは、フェーズがnグラムトークンと完全に一致するためです。 – DotNetNuclear
そのため、すべての可能な順番でトークンを取得する方法はありません –