2012-03-09 68 views
0

我遇到Solr在完全導入過程中不會清除索引的問題。Solr全新刷新不會清除索引

所有服務器都運行Solr 3.4,配置如同vanilla一樣。

我在我們的開發環境和我自己的計算機上的一個實例上試過這個,並且收到了類似的結果。

架構是相當簡單的,這些是顯着點:

<schema name="System" version="1.4"> 
... 
    </types> 
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" /> 
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
    <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0" /> 
    <fieldType name="documentKey" class="solr.TextField"> 
     <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     </analyzer> 
    </fieldType> 
    </types> 
    <fields> 
    <field name="document_id" type="documentKey" indexed="true" stored="true" required="true" /> 
    <field name="entity_id" type="long" indexed="true" stored="true" required="true" /> 
    <field name="name" type="string" indexed="true" stored="true" required="true" /> 
    <field name="entity_type" type="string" indexed="true" stored="true" required="false" /> 
    <field name="Timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/> 
    </fields> 
</schema> 

值得注意的是: - 該DOCUMENT_ID字段是其中用來填充索引物化視圖計算,並且是的組合其他字段不在此索引中,但與entity_id無關。它是獨一無二的。 - entity_id字段是幾個表的關鍵,對於同一個document_id,它可以在刷新和另一個之間瘋狂地改變。

完全刷新之前,如果我查詢索引這樣:

http://localhost:8080/qq-solr/system/select/?rows=10&q=document_id:%22French_Polynesia/Huahine~4034376%22 

我得到:

<?xml version="1.0" encoding="UTF-8"?> 
    <response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">5</int> 
     <lst name="params"> 
     <str name="indent">true</str> 
     <str name="q">document_id:"French_Polynesia/Huahine~4034376"</str> 
     <str name="rows">10</str> 
     </lst> 
    </lst> 
    <result name="response" numFound="1" start="0"> 
    <doc> 
     <date name="Timestamp">2012-03-08T09:47:26.335Z</date> 
     <str name="document_id">French_Polynesia/Huahine~4034376</str> 
     <long name="entity_id">22902728</long> 
     <str name="name">Huahine</str> 
     <str name="type">LOCATION</str> 
    </doc> 
    </result> 
</response> 

然後我刷新:

http://localhost:8080/qq-solr/system/dataimport?command=full-import&clean=true&commit=true&optimize=true 

(我知道乾淨,提交和優化是多餘的,但我用它們只是爲了確保),過了一段時間後,我得到了一切都很好的消息。

然後我再次查詢索引:

http://localhost:8080/qq-solr/system/select/?rows=10&q=document_id:%22French_Polynesia/Huahine~4034376%22 

我也得到:

<?xml version="1.0" encoding="UTF-8"?> 
    <response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">5</int> 
     <lst name="params"> 
     <str name="indent">true</str> 
     <str name="q">document_id:"French_Polynesia/Huahine~4034376"</str> 
     <str name="rows">10</str> 
     </lst> 
    </lst> 
    <result name="response" numFound="1" start="0"> 
    <doc> 
     <date name="Timestamp">2012-03-09T08:31:07.317Z</date> 
     <str name="document_id">French_Polynesia/Huahine~4034376</str> 
     <long name="entity_id">22902728</long> 
     <str name="name">Huahine</str> 
     <str name="type">LOCATION</str> 
    </doc> 
    </result> 
</response> 

但在數據庫中的ENTITY_ID是不同的!

我看到Timestamp已更新,因此記錄已被觸及,但爲什麼舊值保留?

+0

不回答你的問題,但爲什麼你使用優化與Solr 3.x?看看[這裏](http://www.searchworkings.org/blog/-/blogs/simon-says%3A-optimize-is-bad-for-you),你很可能不需要它,並且它甚至不好!我會使用dih優化= false來避免這種不良的默認行爲。 – javanna 2012-03-09 12:30:17

回答

0

我會通過Interactive Development Mode運行您的DataImportHandler(DIH)過程,以便您可以確保您的數據庫查詢正在檢索您期待的entity_id。由於solr條目上的時間戳正在更新,您的DIH進程正在運行,但我猜測原因在於數據被檢索的方式。

+0

就像你說的那樣,數據看起來不錯,但之後核心開始正常工作。奇怪的是,這種行爲持續了幾次刷新和Tomcat重新啓動,並且同一個Solr實例中的另一個內核不會顯示相同的行爲。我會接受你的回答,因爲這是讓我進一步前進的一個答案。 – GVdP 2012-03-13 13:12:57