2017-02-17 19 views
1

DIHを使用してsolrコアから別のコアに単一の列をインポートしようとしています。 Solrのバージョンは6.4.0Solr:他のsolrコアからインポート中に重複レコードを避ける

私の管理スキーマファイルには、次のエントリがありますされています

<uniqueKey>journal</uniqueKey> 
<field name="journal" type="text_general" multiValued="false" indexed="true" stored="true" /> 
<field name="fjournal" type="string" indexed="true" stored="false"/> 

とも以下のようなものcopyField設定:solrconfig.xmlで

<copyField source="journal" dest="fjournal" /> 

、私が設定さ次の要素:

<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" /> 

<requestHandler> 
    <lst name="defaults"> 
     <str name="config">solr-data-config.xml</str> 
    </lst> 
</requestHandler> 

<updateRequestProcessorChain> 
    <processor class="solr.UniqFieldsUpdateProcessorFactory"> 
     <str name="fieldName">journal</str> 
    </processor> 

    <processor class="solr.LogUpdateProcessorFactory" /> 
    <processor class="solr.RunUpdateProcessorFactory" /> 
</updateRequestProcessorChain> 

また、以下のファイルは "solr-data-config.xml" "

インポートプロセスを実行すると、インポート後の値はまだ複製された値を保持します。

{ "journal":"Journal of Immunology", 
     "_version_":1559554209274134528, 
     "fjournal":"Journal of Immunology"}, 
     { 
     "journal":"Journal of Immunology", 
     "_version_":1559554209373749248, 
     "fjournal":"Journal of Immunology"}, 
     { 
     "journal":"Journal of Immunology", 
     "_version_":1559554209375846400, 
     "fjournal":"Journal of Immunology"}, 

どうすればこのようなことが起こらないようにすることができますか?私はローカルのコアから別のコアにデータをインポートしています。

本当にありがとうございます。

+0

を必要とする理由UNIQUEKEY-フィールドのTextFieldを使用しないでください知っているだろう - UNIQUEKEYのための文字列フィールドを使用しようとすると、代わりにそれをテキストフィールドにコピーします。 UniqFieldsUpdateProcessorは、ドキュメント間ではなく、現在のドキュメント内の複数値フィールド内の値でも機能します。 – MatsLindh

+0

こんにちはMatsLind、情報ありがとうございます。私はあなたの与えられた提案を試してみる –

答えて

2

uniqueKeyを定義するときに、コンテンツを分析する必要はありません。 文書を一意に識別する文字列があります。 この一意の識別子は、さまざまなLucene/Solr機能の多くで使用されるため、正しく定義することが重要です。

あなたの例では、私は一意のキーとして 'fjournal'を使用します。

次に、同じfjournalのインデックスを再作成するたびに、Solrドキュメントが上書きされるため、値ごとに1つのエントリになります。

おそらくより良い好奇心はあなたがインデックスに単一擁立文書...

+0

こんにちはアレッサンドロ、提案をありがとう。ジャーナル列を文字列型に変更し、他の列を削除しました。 –

+0

なぜ私はここで単一のインデックス付き列に行く必要があったのですか、それはメインコアからこの特定の列の一意な値だけが必要です。このコアには、このフィールドに重複したエントリを持つ10M以上のレコードが格納されています。私はメインコアの同じ列でファセット処理を試みましたが、 "text_general"と定義されていたので、ファセットクエリでトークン化されたカウントを取得していました。だから私は列から新しいコアに値だけを取得する予定だが、インデックスは重複しないようにした。 –

+0

こんにちはLazar、 私がやったことは、ジャーナルフィールドのコピーフィールドを文字列型として設定することです。 元のコレクションでは、この新しいフィールドでファセットを使用できます(ソースの内容は同じですが、分析されません)。 ファセットを使用すると、ファセットリミットパラメータを使用して、好きなユニークな値の数を表示することができます(関連する出現回数で) –

関連する問題