2011-08-22 10 views
17

मैं अपने प्रोजेक्ट में फ़ज़ी मेलिंग का उपयोग कर मुख्य रूप से गलत नामों और समान नामों की अलग-अलग वर्तनी ढूंढने के लिए उपयोग कर रहा हूं। मुझे यह समझने की ज़रूरत है कि लोचदार खोज का अस्पष्ट मिलान कैसे काम करता है और यह शीर्षक में वर्णित 2 पैरामीटर का उपयोग कैसे करता है।elasticsearch fuzzy मिलान max_expansions और min_similarity

जैसा कि मैं समझता हूं min_similarity एक प्रतिशत है जिसके द्वारा queried स्ट्रिंग डेटाबेस में स्ट्रिंग से मेल खाता है। मुझे इस मूल्य की गणना कैसे की गई है इसका सटीक विवरण नहीं मिला।

max_expansions जैसा कि मैं समझता हूं वह लेवेनशेटिन दूरी है जिसके द्वारा एक खोज निष्पादित की जानी चाहिए। यदि यह वास्तव में लेवेनशेटिन दूरी था तो यह मेरे लिए आदर्श समाधान होता। वैसे भी, यह उदाहरण के लिए काम नहीं कर रहा मैं शब्द है "Samvel"

queryStr  max_expansions   matches? 
samvel  0      Should not be 0. error (but levenshtein distance can be 0!) 
samvel  1      Yes 
samvvel  1      Yes 
samvvell  1      Yes (but it shouldn't have) 
samvelll  1      Yes (but it shouldn't have) 
saamvelll  1      No (but for some weird reason it matches with Samvelian) 
saamvelll  anything bigger than 1 No 

प्रलेखन कहते हैं कुछ मैं वास्तव में समझ में नहीं आता:

Add max_expansions to the fuzzy query allowing to control the maximum number 
of terms to match. Default to unbounded (or bounded by the max clause count in 
boolean query). 

तो किसी को कैसे वास्तव में इन मानकों मुझे समझा कृपया कर सकते खोज परिणामों को प्रभावित करें।

उत्तर

21

min_similarity शून्य और एक के बीच एक मान है। Lucene डॉक्स से:

For example, for a minimumSimilarity of 0.5 a term of the same length 
as the query term is considered similar to the query term if the edit 
distance between both terms is less than length(term)*0.5 

'संपादन दूरी' है कि कहा जाता है Levenshtein distance है।

तरह से इस क्वेरी आंतरिक रूप से काम करता है:

  • यह सभी नियम है कि अनुक्रमणिका में मौजूद है कि खोज पद से मेल खा सकते पाता है, जब खाते में min_similarity लेने
  • तो यह उन सभी के लिए खोज करता शर्तों।

आप कल्पना कर सकते हैं कि यह क्वेरी कितनी भारी हो सकती है!

इसका मुकाबला करने के लिए, आप max_expansions पैरामीटर सेट कर सकते हैं ताकि अधिकतम मिलान संख्याओं को निर्दिष्ट किया जा सके।

+0

आह, तो max_expansions और min_similarity का एक साथ उपयोग किया जाना चाहिए। तो वास्तविक दूरी सीमा 'min_similarity' और' max_expansions' कार्यों द्वारा की जाती है जैसे MySQL के 'LIMIT' खंड? यह सिर्फ संभावित परिणामों की संख्या को सीमित करता है? –

+4

हां, यह 'LIMIT' क्लॉज की तरह काम करता है, जो चलने वाली अंतिम क्वेरी पर नहीं है, लेकिन अंतिम क्वेरी – DrTech

+0

पर खोजने के लिए शब्दों की सूची खोजने के लिए उपयोग की जाने वाली अंतरिम क्वेरी पर बहुत बहुत धन्यवाद :) इससे मदद मिली बहुत :) –