1

検索条件に一致する検索結果を返すsolr検索ベースの重複除外システムをセットアップしています。データベースからデータを取得し、Solr サーバーにインデックス付きドキュメントを作成するために、dataimport ハンドラーを使用しました。

私のsolrスキーマは次のとおりです。

<field name="customer_id" type="int" indexed="true" stored="true" required="true" />
<field name="fname" type="phonetic" indexed="true" stored="true" />
<field name="lname" type="phonetic" indexed="true" stored="true"/>
<field name="address" type="text_en" indexed="true" stored="true" />
<field name="city" type="string" indexed="true" stored="true"  />
<field name="state" type="string" indexed="true" stored="true"  />
<field name="zipcode" type="string" indexed="true" stored="true"  />
<field name="telephone" type="string" indexed="true" stored="true"  />

上記のように、DoubleMetaphoneFilterFactory を使用して、名 (fname) および姓 (lname) フィールドのタイプを音声検索用の音声として指定しました。音声フィールド タイプの説明は次のとおりです。

<fieldtype name="phonetic" stored="false" indexed="true" class="solr.TextField" >
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="15" side="front"/>
    <filter class="solr.DoubleMetaphoneFilterFactory" inject="true"/>
  </analyzer>
</fieldtype>

検索で、いずれかの検索フィールドだけでなく、指定したすべてのクエリ フィールドに一致するドキュメントが返されるようにします。

私の問題は、fname、lname、または address のいずれかを単独で検索すると、結果は非常に関連性がありますが、プライマリ検索クエリと一緒にフィルター クエリを使用すると、両方の検索条件からの結果の結合が結果に含まれることです。

誰かが私が間違っていることを指摘してください。また、重複した顧客レコードを特定できる銀行の重複除外システム用の solr スキーマを設計するために留意すべきベスト プラクティスはありますか。

前もって感謝します!!

4

2 に答える 2

9

Lucene に基づく顧客の重複排除システムが必要な場合は、代わりにDukeを使用することをお勧めします。これは、Lucene を使用してレコードのインデックスを作成し、Levenshtein、Weighted Levenshtein、Jaro-Winkler などのより洗練されたコンパレータを使用して詳細な比較を行う一般的な重複排除エンジンです。JDBC データベースなどの標準コネクタがありますが、次のこともできます。独自に記述したり、エンジンにデータを直接提供したりすることもできます。比較は、確率とベイズの定理の組み合わせに基づいています。

Duke を書いた私の経験から言えば、Lucene にすべての作業を任せるのは難しいでしょう。あなたが言うように、検索結果はかなり良いですが、精度は、このために特別に設計されたアルゴリズムから得られるものほど良くはありません.

したがって、重複排除用に構築されたツールを入手することをお勧めします。Lucene に基づいており、構築しようとしているものに非常に近いため、Duke について言及しましたが、実際には任意のレコード リンケージエンジンを使用できます。Duke はパフォーマンスのために Lucene を使用します (したがって、すべてのレコード ペアを比較する必要はありません) が、他のエンジンには、検索を使用せずに同様のパフォーマンスを達成する別の方法があります。 . したがって、上記のリンク先のレコード リンク ページにリストされているツールのいずれかが機能する可能性があります。

これは数十年にわたって巨大な研究分野であり、人々はこれを解決するために大きな進歩を遂げてきたことに注意してください. だから、既製のツールは本当に良いです。このための商用ツールもたくさんありますが、独自のツールを構築し始めたので、それらは関係ないと思います。

完全な開示: 私は Duke の作者です。ここで自分自身を宣伝することは想定されていませんが、実際には、独自のパッケージを作成するよりも既製のパッケージを使用する方がはるかに優れているように思えます. YMMV。

于 2012-09-26T09:25:55.057 に答える
0

あなたが構築しているクエリは次のようなものです

customer_id OR fname OR someOther

他のフィールドを含める必要がある場合は、クエリを次のように変更する必要があります (union od customer_id と fname with should operator)

(customer_id AND fname) OR someOther

詳細については、次のサイトを検索できます。

于 2012-09-04T10:48:22.610 に答える