Elasticsearch 提供了用于模糊匹配电子邮件地址和电话号码的内置功能。
匹配以特定域名结尾的电子邮件地址(例如@gmail.com):
{
"query": {
"term": {
"email": ".*@gmail.com"
}
}
}
或者,匹配包含特定字符串的电子邮件:
{
"query": {
"match": {
"email": {
"query": "sales@*",
"operator": "and"
}
}
}
}
对于电话号码的模糊匹配,您可以使用以下模式:
{
"query": {
"prefix": {
"tel": "136*"
}
}
}
这将匹配以“136”开头的所有电话号码。
要提高模糊匹配的性能,请考虑使用利用 n-gram 或边缘 n 元词法过滤器。这些过滤器将文本分解为更小的标记,使 Elasticsearch 更容易执行模糊匹配。
电子邮件分析器配置:
{
"settings": {
"analysis": {
"analyzer": {
"email_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"name_ngram_filter",
"trim"
]
}
},
"filter": {
"name_ngram_filter": {
"type": "ngram",
"min_gram": "3",
"max_gram": "20"
}
}
}
}
}
电话分析仪配置:
{
"settings": {
"analysis": {
"analyzer": {
"phone_analyzer": {
"type": "custom",
"char_filter": [
"digit_only"
],
"tokenizer": "digit_edge_ngram_tokenizer",
"filter": [
"trim"
]
}
},
"char_filter": {
"digit_only": {
"type": "pattern_replace",
"pattern": "\\D ",
"replacement": ""
}
},
"tokenizer": {
"digit_edge_ngram_tokenizer": {
"type": "edgeNGram",
"min_gram": "3",
"max_gram": "15",
"token_chars": [
"digit"
]
}
}
}
}
}
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3