Solr拆分将日期连接到多值字段

时间:2016-10-04 12:23:03

标签: solr

我使用将数据存储到solr的应用程序。不幸的是,这个只能将单值写入solr。但是有些数据有多个日期值。所以要搜索它们,我需要它们在多值日期字段中。

我已经遇到了一些字符串值的问题,但通过将值与分隔符连接(以便可以将其转换为一个字符串)然后使用 solr.PatternTokenizerFactory 来解决它。 / p>

因此我尝试使用多值日期字段,但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);
}

1 个答案:

答案 0 :(得分:2)

StatelessScriptUpdateProcessorFactory 可以使用 更新在更新请求期间作为脚本实现的处理器 当Solr更新文档时,我们得到StatelessScriptUpdateProcessorFactory中有多个日期的字段值。我们将价值分开并投入新的领域 假设 multiDate 是多个日期即将到来的字符串字段,日期是具有 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>

1