部分数据在获取时有全角半角的问题,尤其是英文字母,底层所有数据的清洗工作量太大,且涉及数据种类多,字段多。
所以想从检索方面下手,标点在检索时是可以直接忽略的,不知道有没有忽略全角半角的功能。
ElasticSearch提供了一个字符过滤器(Character Filter)叫做"normalize_charmap",它可以在检索时将指定字符映射成其他字符,从而实现忽略全角半角格式的功能。
具体步骤如下:
1.在创建索引时,在分析器中指定字符过滤器(normalize_charmap)。
例如:
PUT /my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "standard",
"char_filter": [
"my_char_filter"
]
}
},
"char_filter": {
"my_char_filter": {
"type": "mapping",
"mappings": [
"A=>A",
"B=>B",
"0=>0",
"1=>1",
...
]
}
}
}
},
"mappings": {
"properties": {
"my_field": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
2.搜索时,使用相同的分析器进行分词和字符过滤。
例如:
GET /my_index/_search
{
"query": {
"match": {
"my_field": {
"query": "abc123",
"analyzer": "my_analyzer"
}
}
}
}
在上面的例子中,将全角的大写字母和数字映射成对应的半角字符,从而在搜索时忽略全角半角格式的差异。
需要注意的是,使用字符过滤器会增加索引和搜索的开销,因此需要根据实际情况进行权衡。
以上回答如果对您有用,望采纳~谢谢