点/句号的Solr过滤器,除非它以某些短语开头

时间:2019-05-10 02:53:02

标签: regex solr lucene

我想知道如何在将数据索引到solr中时替换句点[.]。

除了,我想保留以某些短语开头的单词作为整体标记。

例如,

word.phrase应该被索引为两个关键字:wordphrase

但是,我希望前缀为item.的所有内容都不要以句点分隔,以便:

item.name应该作为一个关键字建立索引:item.name

我正在尝试使用这些过滤器/令牌器,但还是没有运气,我认为我的正则表达式是罪魁祸首:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
      <charFilter class="solr.PatternReplaceCharFilterFactory" 
            pattern="[^(item)]\." replacement=" " />
      <tokenizer class="solr.StandardTokenizerFactory"/>
  </analyzer>
</fieldType>

1 个答案:

答案 0 :(得分:1)

为了仅在不以“ bar”开头时匹配“ foo”,您的正则表达式需要negative lookbehind assertion

以下正则表达式匹配不以“ item”开头的点:(?<!\bitem)\.
在schema.xml中,必须正确转义该模式才能正确解析该模式,因此<变为&lt;

pattern="(?&lt;!\bitem)\."

作为替代方案,您可以使用 filter (放置在标记器的之后)而不是charfilter。