如何解决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 举报,一经查实,本站将立刻删除。