2013-12-23 77 views
0

我使用Solr 4.6示例的SimplePostTool將文檔從文件系統導入到Solr。所有這一切都可以,但只有當原始文檔具有元數據時才填充last_modified字段。如果該字段不存在,Solr提取器會將字段留空。在Solr文檔中未定義時設置last_modified字段

我試圖修改SimplePostTool使用文件系統修改日期來設置此字段,但後來當我試圖導入已經LAST_MODIFIED字段從元數據文件,我得到這個錯誤:

430584 [qtp1214238505-16] ERROR org.apache.solr.core.SolrCore – 
    org.apache.solr.common.SolrException: ERROR: 
    [doc=4861976] multiple values encountered for non multiValued field 
    last_modified: [2013-12-22T14:03:10.000Z, 2013-07-02T11:29:20.000Z] 

我我想使用一個自定義字段作爲文件系統日期,但在我的情況下,元數據日期,如果最好的時候可用。有什麼辦法可以在進口時合併它們?

謝謝!

回答

0

我終於解決了創建自定義的更新請求處理器的問題,因爲這裏說明:http://wiki.apache.org/solr/UpdateRequestProcessor

我的處理器是如下:

package com.mycompany.solr; 

import java.io.IOException; 
import org.apache.solr.common.SolrInputDocument; 
import org.apache.solr.request.SolrQueryRequest; 
import org.apache.solr.response.SolrQueryResponse; 
import org.apache.solr.update.AddUpdateCommand; 
import org.apache.solr.update.processor.UpdateRequestProcessor; 
import org.apache.solr.update.processor.UpdateRequestProcessorFactory; 

public class LastModifiedMergeProcessorFactory 
    extends UpdateRequestProcessorFactory { 

    @Override 
    public UpdateRequestProcessor getInstance(SolrQueryRequest req, 
     SolrQueryResponse rsp, UpdateRequestProcessor next) { 
    return new LastModifiedMergeProcessor(next); 
    } 
} 

class LastModifiedMergeProcessor extends UpdateRequestProcessor { 

    public LastModifiedMergeProcessor(UpdateRequestProcessor next) { 
    super(next); 
    } 

    @Override 
    public void processAdd(AddUpdateCommand cmd) throws IOException { 
    SolrInputDocument doc = cmd.getSolrInputDocument(); 

    Object metaDate = doc.getFieldValue("last_modified"); 
    Object fileDate = doc.getFieldValue("file_date"); 
    if(metaDate == null && fileDate != null) { 
     doc.addField("last_modified", fileDate); 
    } 

     // pass it up the chain 
     super.processAdd(cmd); 
    } 
    } 

其中,file_date是我在導入時使用文件修改日期設置的字段。

0

您可以在模式中設置默認值。像這樣的東西應該工作:

<field name="my_date" type="date" indexed="true" stored="true" multiValued="false" default="NOW" /> 

字段類型定義:

<fieldType name="date"  class="solr.TrieDateField" sortMissingLast="true" omitNorms="true"/> 
+0

對於創建/收到的新文檔編制索引看起來很不錯,但在我們的案例中,我們需要從8歲的文檔數據庫創建新的完整索引。默認情況下,爲最舊的文檔設置當前日期在我們的方案中不是一個好的解決方案。 – WinterN

0

在創建文檔Solr的通吃輸入的文本,然後驗證根據給定的數據類型,因此,任何形式接受的有效日期格式,可以很好地與solr配合使用。 對於當前時間 任何默認值

問候

拉雅

相關問題