1

名前のバリエーションを持つ名前の Lucene インデックスを検索するクエリを作成しようとしています。インデックスは Lucene.NET バージョン 2.9.2 で構築されました

ユーザーは、たとえば「マーガレット ホワイト」と入力します。名前バリアント オプションがないと、クエリは "Margaret White"~1 になり、機能します。

これで、姓と名の両方に対して名前のバリエーションを検索して、拡張リストを作成できます。例えば。この場合 (リストは 100 以上になる場合があるため、例として一部のみを含めます)、

マーガレット / マーグレット・ホワイト / ホワイト

クエリ「マーガレット ホワイト」~1 OR 「マーガレット ホワイト」~1 OR 「マーガレット ホワイト」~1 OR 「マーガレット ホワイト」~1

正しい結果が得られますが、100 x 100 のバリアントの組み合わせが考えられる場合、クエリ文字列は控えめに言っても面倒です。

よりコンパクトなクエリを実現するためにさまざまな方法を試しましたが、何もうまくいかないようです。

誰でもポインタや代替アプローチを教えてもらえますか? インデックス作成プロセスを制御できますが、その段階で何かできることはないでしょうか?

ロジャーを見てくれてありがとう

4

2 に答える 2

4

クエリ時ではなく、インデックス作成プロセスで同義語フィルターを実行します。「白」、「ホワイト」、...を単一の単語にマップするだけです。「白」と言います。「マーガレット」も同様。

次に、クエリは次のようになります"margaret white"~1

于 2011-09-30T14:16:00.393 に答える
1

私は同様の問題に直面し、独自のクエリ パーサーを作成し、クエリ プリミティブを手動でインスタンス化することで解決しました。独自のクエリ パーサーを作成するのは必ずしも簡単ではありませんが、柔軟性が大幅に向上します。新しいクエリ言語では、within/N を使用して近接クエリを指定します。これにより、次の複雑なクエリが可能になります。

margaret within/3 white
margaret within/3 (white or whyte)

またはさらに複雑なクエリ

("first name" within/3 margaret) within/10 ("last name" within/3 (white or whyte))
于 2012-12-05T02:04:46.817 に答える