首页 > 解决方案 > Elasticsearch - 将符号视为常规字符串并使文本不区分大小写

问题描述

我有一个像这样的弹性查询:

return {
    url: API,
    data: {
        query: {
            bool: {
                must: [{
                    function_score: {
                        query: {
                            multi_match: {
                                query: "1234-ASDasdfasdf",
                                // analyzer: "whitespace",
                                type: "best_fields",
                                fuzziness: "1",
                            }
                        }
                    }
                }
                    // filters are pushed into here
                ]
            }
        }
    }
}

我们的业务数据涉及破折号,我发现空白分析器最适合转义破折号并将它们视为常规字符串。

但是,空格分析器会混淆不区分大小写的搜索。

我还没有找到允许不区分大小写并忽略符号的解决方案。使用默认分析器,我认为所有符号都被视为标记器。所以输入类似 1-2-3-4 的内容实际上会搜索 [1,2,3,4]。

是否有不区分大小写并在空格上标记的解决方案(或至少不标记符号)?

标签: elasticsearchwhitespacetokenizecase-sensitiveanalyzer

解决方案


你在正确的轨道上。

如果空格标记器对您有用,但问题不区分大小写,那么您可以添加lowercase token filter

请参阅带有空格标记器和小写过滤器的示例 - 自定义分析器

curl -X PUT "localhost:9200/lowercase_example?pretty" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "analysis": {
      "analyzer": {
        "whitespace_lowercase": {
          "tokenizer": "whitespace",
          "filter": [ "lowercase" ]
        }
      }
    }
  }
}
'

由于您需要更改数据的映射,请不要忘记重新索引数据。


推荐阅读