Lucene を使用してデータセットを検索しています。"" 検索 (正確なフレーズ検索を意味します) メカニズムをどのように実装する必要がありますか?
ユーザーが「littlecat」と入力したときに、すべての「little cat」ヒットを結果として出せるようにしたいと考えています。インデックス作成コードを操作する必要があるので、少なくとも "" 検索がどのように機能するかを確認する必要があります。
Lucene を使用してデータセットを検索しています。"" 検索 (正確なフレーズ検索を意味します) メカニズムをどのように実装する必要がありますか?
ユーザーが「littlecat」と入力したときに、すべての「little cat」ヒットを結果として出せるようにしたいと考えています。インデックス作成コードを操作する必要があるので、少なくとも "" 検索がどのように機能するかを確認する必要があります。
ユーザーが「littlecat」と入力したときに、すべての「little cat」ヒットを結果として出せるようにしたい
これは簡単に聞こえるかもしれませんが、実装するのは非常に困難です。人間の場合、 little と cat は 2 つの異なる単語ですが、コンピューターの場合、辞書があり、コードが辞書でこれらの 2 つの単語をチェックしない限り、 little と cat をlittlecatとは別に認識しません。一方、「little cat 」で検索すると、「 littlecat 」も簡単に検索できます。そして、これは正確なフレーズ検索の概念を超えていると私は信じています。完全一致検索では、「 littlecat 」を検索した場合にのみ littlecat が返されます。逆の場合も同様です。グーグルでさえ(予想通り)、littlecat検索で「小さな猫」を返さない
これを実装する方法は、動的プログラミングです。辞書/コーパスを使用して、個々の単語を比較します(また、テキストを文字列に解析した後の残りの単語も)。
カスタムスペルチェッカーなどを書いているようなものだと考えてください。これには、複数の単語の組み合わせが残っている可能性があるシナリオもあります。たとえば、「walkingmydoginrain」 -ここでは、最初の単語を「walk」または「walking」として分割できます。これがDPの美しさです- 「ingmydoginrain」から正当な単語を形成できないことを (コーパスから) 知っているので(つまり、文字列の残りの部分 - このコンテキストでそれを発見したばかりです -セグメント化された単語を「Walking」として選択し、歩くことはできません。
また、一致を見つけることができないことは、定義したCOST 関数に追加されるため、最適な結果が得られるはずです。つまり、テキスト (空白で区切られていない) が確実に壊れることを確認できます。ただし、その行には複数の可能な単語シーケンスが存在する可能性があります(したがって、これを求める人の意図も含まれている可能性があります)。
あなたのユースケースのためにウェブ上でかなり良い基本実装を見つけることができるはずです(また読んでください:Googleはどのように実装していますか - 「もしかして」)