我正在使用Solr的DataImportHandler来索引数据库中的某些数据。但是,数据库表方案使用CHAR
- 字段,因此它们具有固定宽度并具有一些尾随空格。
我正在尝试使用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>
所以我的问题是如何确保在索引这些文档时,所有尾随空格都被删除。
答案 0 :(得分:3)
Solr分析仪/过滤器不会修改存储值
仅修改索引值
因此TrimFilterFactory
不会更改存储的值,并返回与输入相同的值。
如果使用DIH,请检查ScriptTransformer以在将值输入Solr之前修改该值。
答案 1 :(得分:1)
使用较新版本的solr,您可以使用TrimFieldUpdateProcessorFactory
<updateRequestProcessorChain name="skip-empty" default="true">
<processor class="TrimFieldUpdateProcessorFactory" />
<processor class="RemoveBlankFieldUpdateProcessorFactory" />
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
答案 2 :(得分:0)
我正在基于上述Solr 8.4和最新版本详细说明此解决方案。它们制作起来非常容易实现。
我遇到了同样的问题,即我的大多数字段都带有尾部空格,并且在数以百万计的数据文档中,我有很多类似的字段。
我在 SolrConfig.xml 中添加了以下内容 搜索现有的以下标签,然后添加TrimFieldUpdateProcessorFactory,如下所示。仅一行。
<updateRequestProcessorChain .....>
<processor class="TrimFieldUpdateProcessorFactory" />
</updateRequestProcessorChain>
希望如此简单。