【问题标题】:Exact Match without special characters in SolrSolr中没有特殊字符的完全匹配
【发布时间】:2015-02-25 16:44:20
【问题描述】:

我当前在架构中的字段类型目前被定义为仅进行完全匹配;

<fieldType name="text_exact" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
         <tokenizer class="solr.KeywordTokenizerFactory"/>
         <filter class="solr.LowerCaseFilterFactory"/>
         <filter class="solr.TrimFilterFactory"/>
      </analyzer>
      <analyzer type="query">
         <tokenizer class="solr.KeywordTokenizerFactory"/>
         <filter class="solr.LowerCaseFilterFactory"/>
         <filter class="solr.TrimFilterFactory"/>
      </analyzer>
   </fieldType>

现在,我想实现完全匹配,但在索引过程中会删除特殊字符。

我读到使用 StandardTokenizerFactory 会删除特殊字符。但是,我不希望它在空格上拆分短语的副作用。

是否可以在索引期间执行 StandardTokenizerFactory 然后在查询 KeywordTokenizerFactory 中使用?

还有其他想法吗?

【问题讨论】:

  • KeywordTokenizerFactory 不应删除任何特殊字符,您能否举例说明您用于索引/搜索的一些值?
  • 我正在尝试否定除 & 和 @ 我要替换的所有特殊字符。

标签: solr


【解决方案1】:

您可以使用 Solr 的 CharFilterFactories,可能有适合您的工厂:

solr.HTMLStripCharFilterFactory:它将删除所有html特殊字符,如、&等

solr.PatternReplaceCharFilterFactory:它将替换所有字符,您可以像regexp一样使用它:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="([^a-z])" replacement=""/>

它将删除所有非字母字符,与此类似,您可以删除所有特殊字符。

更多信息 - https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#CharFilterFactories

【讨论】:

  • 谢谢。看起来 PatternReplaceCharFilterFactory 解决了它。我昨天在修修补补,下面的配置做到了。
  • 使用 PatternReplaceCharFilterFactory,我现在可以用 AND 替换 &,用 AT 替换 @。我目前正在尝试找到正确的正则表达式配置以使用 PatternReplaceFilterFactory 删除其他特殊字符。我正在尝试指示过滤器删除除 a-z、&、@ 之外的任何字符。
猜你喜欢
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多