[英]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.