2

編集距離で Lucene インデックスを検索したいと思います。たとえば、フィールド FIRST_NAME を持つドキュメントがあるとします。たとえば、'john' から 1 編集距離離れた名前のすべてのドキュメントが必要です。

Lucene はあいまい検索 (FIRST_NAME:john~) をサポートしており、あいまいさを制御するために 0 から 1 までの数値を取ることを知っています。(私にとって) 問題は、この数値が編集距離に直接変換されないことです。また、ドキュメント内の値が短い文字列 (3 文字未満) の場合、あいまい検索ではそれらを見つけるのが困難です。たとえば、FIRST_NAME が「J」のドキュメントがあり、FIRST_NAME:I~0.0 を検索すると、何も返されません。

4

2 に答える 2

4

Lucene の FuzzyQuery では、正確な距離を指定することはできません。「あいまいさ」の値は 0 から 1 の間で指定できます。0 に近い値は部分一致を示し、1 に近い値は部分一致を示します。「あいまいさ」の式は次のとおりです。(ルセン・イン・アクションより)

この式から、与えられた距離の値に対するおおよそのあいまいさに戻ることができます。したがって、StackOverflowは距離 3 にある と一致するためStackUnderflow、必要なあいまいさは約 0.77 になります。

于 2010-05-12T12:06:13.247 に答える
2

必要な編集距離が 1 つだけで、結果に完全一致を含めることができる場合は、クエリ言語で 1 文字のワイルドカードを使用できます。名前が

john

次に、それに一致するクエリと、1 編集距離内の任意の用語は次のようになります

?john OR j?ohn OR jo?hn OR joh?n OR john? OR ohn OR jhn OR joh OR ?ohn OR j?hn OR jo?n OR joh?

より複雑なケースでは、( IndexReader.term()を使用して) インデックス内の用語のリストを取得し、1 編集距離離れたものを保持し、それらの用語のいずれかを検索する必要がある場合があります。

于 2010-01-30T01:16:45.950 に答える