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]。

是否存在不区分大小写并且在空格上标记化(或者至少不对符号进行标记化)的解决方案?

解决方法

您在正确的轨道上。

如果空白令牌生成器适合您,但问题不区分大小写,则可以添加lowercase token filter

Refer an example with whitespace tokenizer and lowercase filter - custom analyzer

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...