【问题标题】:Trimming fields when adding documents to Solr将文档添加到 Solr 时修剪字段
【发布时间】:2013-01-15 08:22:03
【问题描述】:

我正在使用 Solr 的 DataImportHandler 来索引数据库中的某些数据。但是,数据库表方案使用CHAR-fields,所以它们的宽度是固定的,并且有一些尾随空格。

我正在尝试使用solr.TrimFilterFactory 删除这些尾随空格(修剪它们)。 在我的 Solr schema.xml 中,我使用以下字段类型来索引数据:

<fieldType name="string" class="solr.TextField" sortMissingLast="true" omitNorms="true">
    <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory" />
        <filter class="solr.TrimFilterFactory" updateOffsets="true" />
    </analyzer>
</fieldType>

所以现在我要添加一个文档,例如:

<add>
    <doc>
        <field name="test">Test       </field>
    </doc>
</add>

我希望测试字段中的尾随空格被删除,但是当我查询:test:Test* 时,我得到:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">0</int>
    </lst>
    <result name="response" numFound="1" start="0">
        <doc>
            <str name="test">Test       </str>
        </doc>
    </result>
</response>

如您所见,尾随空格没有被删除。我一定是做错了什么或误解了过滤器的概念。但我的期望是查询会返回:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">0</int>
    </lst>
    <result name="response" numFound="1" start="0">
        <doc>
            <str name="test">Test</str>
        </doc>
    </result>
</response>

所以我的问题是如何确保在索引这些文档时,所有尾随空格都被删除。

【问题讨论】:

    标签: solr indexing trim dataimporthandler


    【解决方案1】:

    Solr 分析器/过滤器不会修改存储的值。
    只有索引值会被修改。
    因此TrimFilterFactory 不会更改存储的值,并且会返回与输入相同的值。

    如果使用 DIH,请检查 ScriptTransformer 以在将值馈送到 Solr 之前对其进行修改。

    【讨论】:

    • 感谢您指出这一点。 ScriptTransformer 确实在做这项工作。
    【解决方案2】:

    对于较新版本的 solr,您可以使用 TrimFieldUpdateProcessorFactory

    <updateRequestProcessorChain name="skip-empty" default="true">
    
       <processor class="TrimFieldUpdateProcessorFactory" />
       <processor class="RemoveBlankFieldUpdateProcessorFactory" /> 
    
       <processor class="solr.LogUpdateProcessorFactory" />
       <processor class="solr.RunUpdateProcessorFactory" />    
    </updateRequestProcessorChain>
    

    【讨论】:

      【解决方案3】:

      我正在根据以上 Solr 8.4 和最新版本详细说明此解决方案。他们做的很容易实现。

      我遇到了同样的问题,我的大多数字段都有尾随空格,而且我在数百万个数据文档中有很多这样的字段。

      我在 SolrConfig.xml 中添加了以下行 搜索现有的以下标签并添加 TrimFieldUpdateProcessorFactory,如下所示。只有一行。

      <updateRequestProcessorChain .....>
        <processor class="TrimFieldUpdateProcessorFactory" />
      
      </updateRequestProcessorChain>
      

      希望这很容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-22
        • 2020-04-25
        • 1970-01-01
        相关资源
        最近更新 更多