これを行う簡単な方法は、n-gramトークンフィルター
メールの場合(=>以下のindex_email_analyzer
を参照 およびsearch_email_analyzer
+ email_url_analyzer
正確なメール照合用)および edge-ngramトークンフィルター
電話の場合(=>以下のindex_phone_analyzer
を参照 およびsearch_phone_analyzer
。
完全なインデックス定義は以下にあります。
PUT myindex
{
"settings": {
"analysis": {
"analyzer": {
"email_url_analyzer": {
"type": "custom",
"tokenizer": "uax_url_email",
"filter": [ "trim" ]
},
"index_phone_analyzer": {
"type": "custom",
"char_filter": [ "digit_only" ],
"tokenizer": "digit_edge_ngram_tokenizer",
"filter": [ "trim" ]
},
"search_phone_analyzer": {
"type": "custom",
"char_filter": [ "digit_only" ],
"tokenizer": "keyword",
"filter": [ "trim" ]
},
"index_email_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [ "lowercase", "name_ngram_filter", "trim" ]
},
"search_email_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [ "lowercase", "trim" ]
}
},
"char_filter": {
"digit_only": {
"type": "pattern_replace",
"pattern": "\\D+",
"replacement": ""
}
},
"tokenizer": {
"digit_edge_ngram_tokenizer": {
"type": "edgeNGram",
"min_gram": "1",
"max_gram": "15",
"token_chars": [ "digit" ]
}
},
"filter": {
"name_ngram_filter": {
"type": "ngram",
"min_gram": "1",
"max_gram": "20"
}
}
}
},
"mappings": {
"your_type": {
"properties": {
"email": {
"type": "string",
"analyzer": "index_email_analyzer",
"search_analyzer": "search_email_analyzer"
},
"phone": {
"type": "string",
"analyzer": "index_phone_analyzer",
"search_analyzer": "search_phone_analyzer"
}
}
}
}
}
それでは、次々と分析していきましょう。
phone
の場合 フィールドでは、index_phone_analyzer
を使用して電話の値にインデックスを付けるというアイデアがあります 、電話番号のすべてのプレフィックスにインデックスを付けるために、edge-ngramトークナイザーを使用します。したがって、電話番号が1362435647
の場合 、次のトークンが生成されます:1
、13
、136
、1362
、13624
、136243
、1362435
、13624356
、13624356
、136243564
、1362435647
。
次に、検索するときに別のアナライザーsearch_phone_analyzer
を使用します 入力番号を取得するだけです(例:136
)そしてそれをphone
と照合します 単純なmatch
を使用したフィールド またはterm
クエリ:
POST myindex
{
"query": {
"term":
{ "phone": "136" }
}
}
email
の場合 フィールドでは、index_email_analyzer
を使用してメール値にインデックスを付けるという点で同様の方法で処理します。 、ngramトークンフィルターを使用します。これにより、電子メールの値から取得できるさまざまな長さ(1〜20文字)のすべての可能なトークンが生成されます。例:[email protected]
j
にトークン化されます 、jo
、joh
、...、gmail.com
、...、[email protected]
。
次に、検索するときに、search_email_analyzer
という別のアナライザーを使用します これは入力を受け取り、それをインデックス付きトークンと照合しようとします。
POST myindex
{
"query": {
"term":
{ "email": "@gmail.com" }
}
}
email_url_analyzer
この例ではアナライザーは使用されていませんが、正確な電子メール値を一致させる必要がある場合に備えて、アナライザーを含めました。