【问题标题】:Solr split joined dates to multivalue fieldSolr 将连接日期拆分为多值字段
【发布时间】:2016-10-04 12:23:03
【问题描述】:

我使用一个将数据存储到 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);
}

【问题讨论】:

    标签: solr


    【解决方案1】:

    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>
    

    l

    【讨论】:

    • 听起来很有希望!我会试一试。谢谢!
    • 行得通!谢谢!编辑了我的问题以给出一个工作示例。
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多