Regex Solr PatternReplaceFilterFactory进程值不匹配
我有一个字段,用于按文档名称的某一部分对文档进行分类。大多数文档都有一个名称,它遵循两个字符后跟两个小数等模式。。。我想提取的是前2个字符,它使用以下定义Regex Solr PatternReplaceFilterFactory进程值不匹配,regex,solr,indexing,Regex,Solr,Indexing,我有一个字段,用于按文档名称的某一部分对文档进行分类。大多数文档都有一个名称,它遵循两个字符后跟两个小数等模式。。。我想提取的是前2个字符,它使用以下定义 <filter class="solr.PatternReplaceFilterFactory" pattern="^.*(\D{2})\d{2}.*$" replacement="$1" replace="all"/> 这里的问题是,不匹配的条目会按照它们的确切名称编制索引,但我希望它们位于
<filter class="solr.PatternReplaceFilterFactory"
pattern="^.*(\D{2})\d{2}.*$" replacement="$1" replace="all"/>
这里的问题是,不匹配的条目会按照它们的确切名称编制索引,但我希望它们位于“未分类”下,我需要一种方法将其替换为类似的内容。如何执行此操作?如果与您的模式不匹配的文档的字段长度始终为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"/>
虽然这似乎有效,但它不是100%故障保护,但现在应该可以了:)谢谢