在solr搜索中删除标点符号

Remove punctuation's in solr search

我是 solr 的新手,我在 solr 中索引了一个文档,例如

 {
    "foodType": "basicFood",
    "fulltext": [
      "basicFood",
      "3.718625",
      "1 tbsp",
      "Butter, salted"
    ],
    "slims": "3.718625",
    "displayText": "1 tbsp",
    "displayName": "Butter, salted"
  },

当我搜索 butter 时,结果为空,但它对查询 butter 效果很好,如何让它也对 butter 起作用?

将以下过滤器添加到您的索引和查询阶段的分析器。

<filter class="solr.PatternReplaceFilterFactory" pattern="([^A-Za-z0-9])" replacement="" replace="all"/>

这将替换令牌中除 a-zA-Z0-9 之外的所有字母。要对此进行测试,您可能需要重新索引您的数据,因为您的索引数据将包含标点符号。或者您可以在 solr admin UI,分析部分尝试。

其他方法,在分析器阶段使用不同的分词器而不是 StandardTokenizerFactory。您可以使用 LetterTokenizerFactory 创建由连续字母字符串组成的标记。任何非字母字符都将被丢弃。但这会创建许多您可能不想要的额外令牌。 请先检查再做。

Example: "I can't" ==> "I", "can", "t"

更新

如果需要使用WordDelimiterFilter过滤器。尝试以下配置:

<filter class="solr.WordDelimiterFilter" generateWordParts="1" catenateWords="1" splitOnCaseChange="0"  generateNumberParts="0" splitOnCaseChange="0"/>

这将在分隔符处拆分单词并再次将它们连接起来。所有其他拆分都是 turned off,例如 numeric stringscamel-case changetransitions from alpha to numeric。如果需要,您可以通过提供 non-zero 值来 turn on