2017-02-17 21 views
1

我想從solr內核導入使用DIH的另一個內核中的單個列。 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設置如下圖所示:

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

在solrconfig.xml中,我配置以下元素:

<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 「

<dataConfig> 
    <document> 
    <entity name="journalMaster" processor="SolrEntityProcessor" 
      url="http://localhost:8983/solr/journalMaster " 
      query="*:*" 
      fl="journal"/> 
    </document> 
</dataConfig> 

當我執行導入過程時,導入後的值已完成,仍然保留重複的值。

{ "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

不要使用文本字段的唯一鍵場 - 嘗試使用字符串字段爲唯一鍵,和然後將其複製到文本字段中。 UniqFieldsUpdateProcessor也僅適用於當前文檔中多值字段內的值,而不是文檔之間的值。 – MatsLindh

+0

嗨MatsLind,感謝您的信息。我會嘗試你的建議, –

回答

2

定義uniqueKey時,不需要分析內容。 只需要一個字符串來唯一標識文檔。 這個獨特的標識符將用於許多不同的Lucene/Solr功能,因此正確定義它非常重要。

在你的例子中,我會使用'fjournal'作爲唯一鍵。

然後,沒有別的事可以擔心了,每次重新索引同一個fjournal時,Solr文檔都會被覆蓋,所以您最終會得到每個值的單個條目。

可能是一個更好的好奇心會知道你爲什麼需要索引單個文檔派出...

+0

嗨亞歷山德羅,謝謝你的建議。我將日記欄更改爲字符串類型,並刪除了另一欄。 –

+0

爲什麼我不得不在這裏尋找一個索引列,是的,我只需要來自主核心的這個特定列的唯一值。該核心擁有超過1000萬條記錄,並且該字段的重複條目更多。我試圖在主核心的同一列上創建面,但由於它被定義爲「text_general」,我只是在facet查詢中獲得了標記化計數。所以我計劃只把列中的值放入一個新的核心,但是索引,這樣它就不會重複。 –

+0

嗨拉扎爾, 我會做的,是設置日記字段的副本字段,配置爲字符串類型。 然後,在原始集合中,您可以在這個新字段上使用faceting(它將具有相同的源內容,但未分析)。 當面對你可以玩facet極限參數,看看你喜歡多少獨特的價值(與發生的相關計數) –