Elasticsearch 提供用於模糊匹配電子郵件地址和電話號碼的內建功能。
要匹配以特定域結尾的電子郵件地址(例如@gmail.com):
<code class="json">{ "query": { "term": { "email": ".*@gmail.com" } } }</code>
或者,要匹配包含特定字串的電子郵件:
<code class="json">{ "query": { "match": { "email": { "query": "sales@*", "operator": "and" } } } }</code>
對於電話號碼的模糊匹配,您可以使用以下模式:
<code class="json">{ "query": { "prefix": { "tel": "136*" } } }</code>
這將匹配所有以“136”開頭的電話號碼。
要提高模糊匹配的效能,請考慮使用利用 n-gram 或邊緣 n-gram 標記過濾器的自訂分析器。這些過濾器將文字分解為更小的標記,使 Elasticsearch 更容易執行模糊匹配。
電子郵件分析器設定:
<code class="json">{ "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" } } } } }</code>
電話分析器設定:
<code class="json">{ "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" ] } } } } }</code>
以上是如何使用Elasticsearch對電子郵件地址和電話號碼進行模糊匹配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!