发布于 2年前
Elasticsearch使用pattern_replace过滤器忽略查询里的特殊字符
假设elasticsearch的一个字段存储了包含字母,数字以及特殊字符的字符串作为值,如ABC-123-456。
现在用户输入以下字符希望能匹配此值:
- 完全匹配:ABC-123-456
- 忽略特殊字符:ABC123456
- 小写且忽略特殊字符:abc123456
- 混有其他特殊字符串:Ab.c-123,456
这里可以使用pattern_replace过滤器以及自定义一个分析器来处理。
1、定义pattern_replace过滤器
"char_filter": {
"specialCharactersFilter": {
"pattern": "[^A-Za-z0-9]",
"type": "pattern_replace",
"replacement": ""
}
}
2、使用上面的过滤定义分析器
"analyzer": {
"alphanumericStringAnalyzer": {
"filter": "lowercase",
"char_filter": [
"specialCharactersFilter"
],
"type": "custom",
"tokenizer": "standard"
}
}
分析器命名为alphanumericStringAnalyzer
3、使用以上的分析器设置字段的映射
"order": {
"type": "text",
"fields": {
"alphanumeric": {
"type": "text",
"analyzer": "alphanumericStringAnalyzer"
},
"raw": {
"type": "keyword"
}
}
}