【发布时间】:2016-10-19 06:30:27
【问题描述】:
现在我有一个按以下格式索引的字段,
“my_field”:”Abc&Deo&Efg”
"&" 可以分隔“n”个项目,有没有办法用 & 拆分此字段并在索引时存储在单独的字段中solr,字段名可以是solr中的值本身。
【问题讨论】:
标签: solr
现在我有一个按以下格式索引的字段,
“my_field”:”Abc&Deo&Efg”
"&" 可以分隔“n”个项目,有没有办法用 & 拆分此字段并在索引时存储在单独的字段中solr,字段名可以是solr中的值本身。
【问题讨论】:
标签: solr
您必须在更新链中执行此操作。使用 ScriptUpdateProcessor 然后编写一些 Javascript 来执行此操作
<processor class="solr.StatelessScriptUpdateProcessorFactory">
<str name="script">updateProcessor.js</str>
</processor>
在更新处理器脚本中(在您的 conf 目录中):
function processAdd(cmd) {
doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument
field= doc.getFieldValue("my_field");
// tokenize your string here on the & separate then put tokens into new field, which could be a multivalue
doc.setField("mySplitField", token);
}
问题是当您可以在索引时简单地标记“&”然后每个组件都是可搜索的时,为什么要这样做。
这里有更多信息:https://dutchweballiance.nl/techblog/introducing-the-solr-scriptupdateprocessor/
【讨论】:
是的,您可以通过 Regular Expression Pattern Tokenizer 做到这一点
我通过添加到 schema.xml 进行了快速测试
<field name="my_field" type="my_field_type" indexed="true" stored="true" required="true" multiValued="false" />
<fieldType name="my_field_type" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="&"/>
</analyzer>
</fieldType>
所以,基本上这个技巧可以用标记器来完成,它会通过一些需要的符号来分割数据,在你的例子中是&符号。
【讨论】: