ऐसा करने का एक आसान तरीका एक कस्टम विश्लेषक बनाना है जो n-ग्राम टोकन फ़िल्टर
ईमेल के लिए (=> नीचे देखें 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
. के साथ अनुक्रमित करना है , जो फ़ोन नंबर के सभी उपसर्गों को अनुक्रमित करने के लिए एक एज-एनग्राम टोकननाइज़र का उपयोग करता है। तो अगर आपका फ़ोन नंबर 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
के साथ अनुक्रमित करते हैं , जो एक एनग्राम टोकन फिल्टर का उपयोग करता है, जो अलग-अलग लंबाई (1 और 20 वर्णों के बीच) के सभी संभावित टोकन का उत्पादन करेगा जिसे ईमेल मूल्य से लिया जा सकता है। उदाहरण के लिए:[email protected]
j
. के लिए टोकन किया जाएगा , jo
, joh
, ..., gmail.com
, ..., [email protected]
।
फिर खोज करते समय, हम search_email_analyzer
. नामक एक अन्य विश्लेषक का उपयोग करेंगे जो इनपुट लेगा और इसे अनुक्रमित टोकन के खिलाफ मिलान करने का प्रयास करेगा।
POST myindex
{
"query": {
"term":
{ "email": "@gmail.com" }
}
}
email_url_analyzer
इस उदाहरण में विश्लेषक का उपयोग नहीं किया गया है, लेकिन मैंने इसे केवल तभी शामिल किया है जब आपको सटीक ईमेल मान से मिलान करने की आवश्यकता हो।