簡體   English   中英

Solr將合並日期拆分為多值字段

[英]Solr split joined dates to multivalue field

我使用將數據存儲到Solr的應用程序。 不幸的是,這個只能將單值寫入solr。 但是某些數據具有多個日期值。 因此,要搜索它們,我需要在多值日期字段中輸入它們。

我已經遇到了一些字符串值的問題,但是通過使用分隔符將值連接起來(以便可以將其作為一個字符串傳輸),然后使用solr.PatternTokenizerFactory解決了該問題

因此,我嘗試使用多值日期字段進行相同的操作,但是solr拒絕了此操作:

FieldType: TrieDateField does not support specifying an analyzer

在solr方面是否還有其他解決方案?

tldr:有什么方法可以獲取多值日期

2015-07-29T16:50:00Z
2016-04-08T18:15:00Z

在......之外

2015-07-29T16:50:00Z$2016-04-08T18:15:00Z

提前致謝!

[編輯]

sanjayduttindia是正確的。 效果很好! 最后,我不得不在迭代中設置數組的值。

function processAdd(cmd) {
    doc = cmd.solrDoc;
    id = doc.getFieldValue("id");
    multiDate = doc.getFieldValue("sendebeginn_raw");
    dates = multiDate.split("$");
    dates.forEach(function (item) {
        doc.addField("sendebeginn", item);
    });
    logger.info("UpdateScript processed: "+id);
}

StatelessScriptUpdateProcessorFactory ,用於在更新請求期間使用作為腳本實現的更新處理器。
當Solr更新文檔時,我們在StatelessScriptUpdateProcessorFactory中獲得多個日期即將到來的字段值。 我們將值拆分並放入新字段。
可以說multiDate是一個字符串字段,其中要輸入多個日期,而date是具有tdate作為字段類型的多值字段。

<field name="multiDate" type="strings"/>
<field name="date" type="tdate" multiValued="true" indexed="true" stored="true"/>

以下是示例update-script.js

function processAdd(cmd) {
    doc = cmd.solrDoc;
    multiDate = doc.getFieldValue("multiDate").toString();
    dates = multiDate.split("\\$");
    doc.setField("date",dates);

}
function processDelete(cmd) {
  // no-op
}

function processMergeIndexes(cmd) {
  // no-op
}

function processCommit(cmd) {
  // no-op
}

function processRollback(cmd) {
  // no-op
}

function finish() {
  // no-op
}

將StatelessScriptUpdateProcessorFactory處理器添加到solrconfig.xml中的updateRequestProcessorChain

<processor class="solr.StatelessScriptUpdateProcessorFactory">
   <str name="script">updateProcessor.js</str>
 </processor>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM