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