【问题标题】:Solr Split string and storing into multiple fields while IndexingSolr 在索引时拆分字符串并存储到多个字段中
【发布时间】:2016-10-19 06:30:27
【问题描述】:

现在我有一个按以下格式索引的字段,

“my_field”:”Abc&Deo&Efg”

"&" 可以分隔“n”个项目,有没有办法用 & 拆分此字段并在索引时存储在单独的字段中solr,字段名可以是solr中的值本身。

【问题讨论】:

    标签: solr


    【解决方案1】:

    您必须在更新链中执行此操作。使用 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/

    【讨论】:

    • 谢谢,我一定会尝试您的解决方案并让您知道。其实我想将用“&”分隔的值存储在不同的字段中
    • 这应该是可能的,但您要么需要使用动态字段,例如:ampfield_*,其中值是一个计数,或者提前在模式中定义所有字段,但我不认为你知道字段的总数。
    • 如何配置更新处理器?让我编辑我的问题并放在那里,你看比
    • 添加了一个包含更多信息的 URL。请记住,这对更新的性能影响很小。
    • 如何将参数传递给脚本? 示例配置参数 "headline_t" 是我的参数
    【解决方案2】:

    是的,您可以通过 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="&amp;"/>
          </analyzer>
        </fieldType>
    

    所以,基本上这个技巧可以用标记器来完成,它会通过一些需要的符号来分割数据,在你的例子中是&符号。

    【讨论】:

    • 谢谢,会告诉你的!无论如何如何将其拆分并存储在不同的字段中?
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多