0

我有一个字段,用于按文档名称的某个部分对文档进行分类。大多数文档的名称都遵循一个模式,比如两个字符后跟两个小数等等……我要提取的是前 2 个字符,它使用以下定义。

<filter class="solr.PatternReplaceFilterFactory"
                pattern="^.*(\D{2})\d{2}.*$" replacement="$1" replace="all"/>

这里的问题是不匹配的条目被它们的确切名称索引,但我希望它们位于“未分类”之下,我需要一种方法来用类似的东西替换它。你会怎么做?

4

1 回答 1

1

您可以在模式替换过滤器之后使用长度过滤器,前提是与您的模式不匹配的文档的字段长度始终为 3 或更多:

<filter class="solr.PatternReplaceFilterFactory"
                pattern="^.*(\D{2})\d{2}.*$" replacement="$1" replace="all"/>
<filter class="solr.LengthFilterFactory" min="1" max="2" />

这将使与您的模式不匹配的所有文档的字段为空。

但是,如果您希望在这种情况下将字段值“未分类”,则在长度过滤器之后使用另一个 PatternReplaceFilterFactory,它将空标记替换为“未分类”:

<filter class="solr.PatternReplaceFilterFactory"
                    pattern="^$" replacement="uncategorized"/>

或者:您可以像这样直接将长度为 3 或更多的所有标记替换为“未分类”:

<filter class="solr.PatternReplaceFilterFactory"
                    pattern="^.*(\D{2})\d{2}.*$" replacement="$1" replace="all"/>
<filter class="solr.PatternReplaceFilterFactory"
                    pattern="^.{3,}$" replacement="uncategorized" replace="all"/>
于 2013-11-06T23:21:34.333 回答