微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Elasticsearch-将符号视为常规字符串并使文本不区分大小写

如何解决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" ]
        }
      }
    }
  }
}
'

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。