16

一見シンプルだが非常に複雑な検索の世界に足を踏み入れたところです。アプリケーションの場合、ユーザーを名前で検索するための検索メカニズムを構築する必要があります。

以下を含む多数の投稿や記事を読んだ後:

Luceneを個人名(名、姓)の検索に使用するにはどうすればよいですか?
http://dublincore.org/documents/1998/02/03/name-representation/
ユーザーとの関係を最初に優先してソーシャルネットワークを検索する最良の方法は何ですか?
http://www.gossamer-threads.com/lists/lucene/java-user/120417Lucene
インデックスとクエリデザインの質問-人の検索
LuceneFuzzy顧客名と部分的なアドレスを検索します

...そして私がその瞬間に見つけることができない他のいくつか。そして、少なくともインデックス作成と基本的な検索を私のマシンで機能させるために、ユーザー検索のために次のスキームを考案しました。

1)1番目、2番目、3番目の名前フィールドを用意し、Solrでインデックスを付けます
。2)複数列検索のrequestParserとしてedismaxを使用します。3
)音訳、ラテン語からASCIIへの変換などの正規化フィルターの組み合わせを使用します
。4 )最後にあいまい検索を使用します

明らかに、これに非常に慣れていないので、上記がそれを行うための最良の方法であるかどうかはわかりません。この分野で私よりも優れたアイデアを持っている経験豊富なユーザーから話を聞きたいと思います。

次の方法で名前を一致させる必要があります。

1)アクセントフォールディング:JornはJörnと一致し、その逆も同様 です
。2)代替スペル:KarlはCarlと一致し、その逆も同様
です。
ジョンなど
5)Soundexマッチング:エリンとエレン

ガイダンス、批判、コメントは大歓迎です。これが可能かどうか教えてください...またはおそらく私はただの空想です。:)


編集

また、投稿の1つからの例として、一部の人が長い名前を持っている場合に備えて、フルネームフィールドもあることを追加する必要があります。JonPaulまたはDelCarmenもJonPaulDelCarmenと一致する必要があります。

また、これは新しいプロジェクトであるため、スキーマとアーキテクチャを適切と思われる方法で変更できるため、制限は非常に限られています。

4

5 に答える 5

9

非常に大まかに一致させる必要がある検索を含むコーパスに対応しているようですね?

それを行っている場合は、フィールドを選択し、さまざまなブーストを設定して結果をランク付けする必要があります.

そのため、solr に個別の「コピーされた」フィールドがあります。

  • 正確なフルネーム用の 1 つのフィールド (フィルターあり)
  • フィルタ ASCIIFolding、Lowercase を使用した多値フィールド
  • SynonymFilterFactory ASCIIFolding、Lowercase... を持つ多値フィールド
  • PhoneticFilterFactory ( CaverphoneまたはDouble-Metaphoneを使用)

関連項目: 英語以外のSoundexの議論

名前のシノニム、利用可能なパブリック シノニム データベースがあるかどうかはわかりません。

あいまい検索、私はそれが有用だとは思いませんでした。レーベンシュタイン距離を使用しています。

他のフィルターとインデックス作成では、より優れた「検索に関連する」結果が得られます。

名前の Unicode 文字はASCIIFoldingFilterFactoryで処理できます

予想されるユースケースのソリューションを前もって説明しています。

質の高い結果が必要な場合は、検索関連性の調整を計画してください

この調整は、MacDonald と McDonald (Carl と Karl よりもレーベンシュタイン距離が大きい) などの同義語で照合を試みる場合に特に役立ちます。

于 2011-04-05T12:40:26.507 に答える
3

ニックネームdbが見つかりましたが、どれだけ良いかわかりません:http: //www.peacockdata2.com/products/pdnickname/

無料ではないことに注意してください。

于 2012-09-20T07:37:31.493 に答える