Solr - 删除模式内的文本

时间:2016-07-12 10:24:59

标签: solr lucene

我正在与Solr合作。索引一个字段为Windows !! 1 !!,其中!! 1 !!是在前端显示数据时显示时使用的显示顺序。字段类型是字符串。

此外,该字段是索引字段,我们需要对其进行搜索。你能告诉我们如何删除!! 1 !!在用于执行搜索的字段中使用某些过滤器工厂?

我打算为此字段创建一个副本字段,目标字段将是文本字段,因为我们需要应用分析器和标记器。有没有办法删除!! 1 !!使用某种模式?

以下是我正在编制索引的一些示例文本:

视窗!! 1 !!

Android手机!! 5 !!

12 TB!15 !!

12 gb !! 0 !!

1 个答案:

答案 0 :(得分:1)

是的,你有。看看下面给出的solr类,用于基于模式的替换。

 <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([^a-z])" replacement=""/>
<tokenizer class="solr.PatternTokenizerFactory" pattern=";\s*" />
<filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all"/>

在自定义分析器中使用以下任何一种方法对数据进行实验,它肯定会起作用。让我知道,如果这有帮助:)使用以下分析仪为您的领域,我试过,它的工作!

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  </fieldType>

实际上我发现我在给出答案时有点不对劲。你根本不需要任何模式替换工厂! solr.StandardTokenizerFactory为你做了一切。它删除了!作为默认行为。从solr文档中查看此快照。enter image description here

编辑III :使用以下分析仪,它的工作!!

 <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.PatternReplaceFilterFactory" pattern="([!\dx!])" replacement="" replace="all"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  </fieldType>

使用上述分析仪附加我的solr分析屏幕的快照。你可以看到&#34; PRF&#34;在图像中的阶段。 &#34; 1&#34;由于上面的正则表达式,感叹号之间的数字也被删除了。您可以相应地定制解决方案。 enter image description here

如果有帮助,请告诉我:)。