2013-07-08 7 views
9

जो मैं खोज रहा हूं, वह स्पष्ट, स्पष्ट स्पष्टीकरण है कि एलैस्टिकशर्च (लुसीन) का डिफ़ॉल्ट स्कोरिंग तंत्र वास्तव में कैसे काम करता है। मेरा मतलब है, क्या यह लुसीन स्कोरिंग का उपयोग करता है, या शायद यह अपने आप स्कोरिंग का उपयोग करता है?लोचदार खोज डिफ़ॉल्ट स्कोरिंग तंत्र

उदाहरण के लिए, मैं दस्तावेज़ के लिए खोजना चाहता हूं, उदाहरण के लिए, "नाम" फ़ील्ड। मैं अपने प्रश्न लिखने के लिए .NET NEST क्लाइंट का उपयोग करता हूं। के प्रश्न के इस प्रकार पर विचार करें:

IQueryResponse<SomeEntity> queryResult = client.Search<SomeEntity>(s => 
    s.From(0) 
    .Size(300) 
    .Explain() 
    .Query(q => q.Match(a => a.OnField(q.Resolve(f => f.Name)).QueryString("ExampleName"))) 
); 

जो इस तरह के JSON क्वेरी के लिए अनुवाद किया है:

{ 
"from": 0, 
"size": 300, 
"explain": true, 
"query": { 
    "match": { 
    "Name": { 
     "query": "ExampleName" 
     } 
    } 
    } 
} 

वहाँ के बारे में 11 लाख दस्तावेजों उस खोज के लिए किया जाता है है।

650 "ExampleName" 7,313398 

651 "ExampleName" 7,313398 

652 "ExampleName" 7,313398 

653 "ExampleName" 7,239194 

654 "ExampleName" 7,239194 

860 "ExampleName of Something" 4,5708737 

जहां पहले क्षेत्र सिर्फ एक आईडी है, दूसरा नाम क्षेत्र है जिस पर ElasticSearch प्रदर्शन किया यह खोज किए जाने के है, और तीसरा: क्या मैं बदले में मिलता है, (जो परिणाम का ही हिस्सा, अपने दम पर स्वरूपित है) स्कोर है

जैसा कि आप देख सकते हैं, ईएस इंडेक्स में कई डुप्लिकेट हैं। चूंकि कुछ पाए गए दस्तावेज़ों में भिन्न स्कोर है, इसके बावजूद वे बिल्कुल वही हैं (केवल भिन्न आईडी के साथ), मैंने निष्कर्ष निकाला कि अलग-अलग शतरंज पूरे डेटासेट के अलग-अलग हिस्सों पर खोज कर प्रदर्शन करते हैं, जिससे मुझे यह पता चलता है कि स्कोर कुछ हद तक समग्र रूप से आधारित है दिए गए शार्ड में डेटा, विशेष रूप से दस्तावेज़ पर नहीं जिसे वास्तव में खोज इंजन द्वारा माना जाता है।

सवाल यह है कि यह स्कोरिंग वास्तव में कैसे काम करती है? मेरा मतलब है, क्या आप मुझे ईएस द्वारा प्राप्त प्रत्येक दस्तावेज़ के लिए स्कोर की गणना करने के लिए मुझे बता सकते हैं/मुझे सटीक फॉर्मूला पर इंगित कर सकते हैं? और अंत में, यह स्कोरिंग तंत्र कैसे बदला जा सकता है?

उत्तर

11

डिफ़ॉल्ट स्कोरिंग कोर ल्यूसीन, largely documented here में डिफ़ॉल्ट समरूपता एल्गोरिदम है। आप your own Similarity को कॉन्फ़िगर करके या custom_score query जैसे कुछ का उपयोग करके स्कोरिंग को कस्टमाइज़ कर सकते हैं।

दिखाए गए पहले पांच परिणामों में विषम स्कोर भिन्नता इतनी छोटी लगती है कि यह मुझे बहुत अधिक चिंता नहीं करता है, जहां तक ​​क्वेरी परिणामों की वैधता और उनके आदेश के लिए, लेकिन यदि आप इसका कारण समझना चाहते हैं, explain api आपको दिखा सकता है कि वहां क्या हो रहा है।

+0

ठीक है, जो मैं जानना चाहता था वह बहुत अधिक कवर करता है। जानकारी जो ईएस पूरी तरह से ल्यूसीन की समानता का उपयोग कर रही है वह बहुत उपयोगी है। धन्यवाद! –

+0

लुसीन के स्कोरिंग एल्गोरिदम में कारकों के बारे में अधिक जानकारी: http://www.lucenetutorial.com/advanced-topics/scoring.html – ThoQ

2

स्कोर भिन्नता किसी दिए गए शार्ड (जैसे आपको संदेह है) में डेटा पर आधारित है। डिफ़ॉल्ट रूप से ES 'क्वेरी' नामक एक खोज प्रकार का उपयोग करता है, फिर लाता है, जो प्रत्येक शार्ड को क्वेरी भेजता है, स्थानीय टीडीआईफ़ का उपयोग करके स्कोर के साथ सभी मेल खाने वाले दस्तावेज़ों को पाता है (यह किसी दिए गए शार्ड पर डेटा के आधार पर भिन्न होगा - यहां आपकी समस्या है) ।

आप इसे डीएफएस क्वेरी का उपयोग करके बदल सकते हैं, फिर 'खोज प्रकार प्राप्त करें - शब्द और दस्तावेज़ आवृत्तियों के बारे में पूछने वाले प्रत्येक शार्ड को प्रीक्वरी करें और फिर प्रत्येक शार्ड आदि के लिए एक प्रश्न भेजता है ..

आप यूआरएल में सेट कर सकते हैं

$ curl -XGET '/index/type/search?pretty=true&search_type=dfs_query_then_fetch' -d '{ 
    "from": 0, 
    "size": 300, 
    "explain": true, 
    "query": { 
    "match": { 
     "Name": { 
     "query": "ExampleName" 
     } 
    } 
    } 
}' 
संबंधित मुद्दे