2014-09-05 7 views
6

Elasticsearch के लिए नया। मुझे केवल सबसे प्रासंगिक दस्तावेज़ लौटने में दिलचस्पी है और min_score पर आया है। वे कहते हैं "नोट, ज्यादातर बार, यह ज्यादा समझ में नहीं आता है" लेकिन कोई कारण नहीं प्रदान करता है। तो, min_score का उपयोग करने के लिए यह समझ में क्यों नहीं आता है?Elasticsearch के साथ min_score का उपयोग क्यों नहीं करें?

संपादित करें: मैं वास्तव में क्या करना चाहता हूं केवल उन दस्तावेजों को लौटाएं जिनके पास x "स्कोर" से अधिक है। मैं इस है:

data = { 
     'min_score': 0.9, 
     'query': { 
      'match': {'field': 'michael brown'}, 
     } 
    } 

वहाँ के लिए एक बेहतर विकल्प है ऊपर इतना है कि यह केवल सबसे प्रासंगिक डॉक्स रिटर्न?

thx!

संपादित करें # 2: मैं minimum_should_match उपयोग कर रहा हूँ और यह एक 400 त्रुटि देता है:

"error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed;" 

data = { 
     'query': { 
      'match': {'keywords': 'michael brown'}, 
      'minimum_should_match': '90%', 
     } 
    } 
+0

कोई बहुत उपयोगी प्रश्नों जब तक आप अपने आप को स्कोर परिणामों के लिए गणना कर रहे हैं, और फिर भी वे आपके द्वारा पूरी तरह से नियंत्रक होने की जरूरत होने की संभावना होगी। स्कोरिंग बूस्ट का उपयोग करने के बावजूद मैंने min_score का कभी भी उपयोग नहीं किया है क्योंकि मैंने कम से कम न्यूनतम स्कोर के लिए कभी भी देखभाल नहीं की है। मैं केवल छंटाई और शीर्ष n – coffeeaddict

+0

मैं भी minimum_should_match का उपयोग कर की कोशिश की है खोज के लिए स्कोर का उपयोग, लेकिन यह एक "400" स्थिति देता है। मैंने अपना प्रश्न अपडेट कर लिया है। –

+0

आप न्यूनतम_should_match का उपयोग कैसे कर रहे थे? min_score के बारे में बात 0.9 का क्या मतलब है? आप कैसे परिभाषित किया है क्या स्कोर के आधार पर 'काफी अच्छा' है – coffeeaddict

उत्तर

4

मैं दस्तावेजों कि किसी दिए गए सेट करने के लिए एक निश्चित मैच हैं खोजने की कोशिश कर के लिए min_score काफी एक बहुत का उपयोग किया है इनपुट डेटा का - जिसका उपयोग क्वेरी उत्पन्न करने के लिए किया जाता है।

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

हालांकि, आपको यह ध्यान में रखना होगा कि स्कोर केवल क्वेरी और लौटे दस्तावेज़ पर निर्भर नहीं है, यह उन सभी अन्य दस्तावेजों पर विचार करता है जिनके लिए आप पूछ रहे फ़ील्ड के लिए डेटा रखते हैं। इसका अर्थ यह है कि यदि आप 20 मिनटों के सूचकांक के साथ अपने min_score मान का परीक्षण करते हैं, तो जब आप इसे उत्पादन सूचकांक पर प्रयोग करते हैं, तो उदाहरण के लिए, कुछ हजार दस्तावेज़ या अधिक के साथ यह स्कोर काफी बदल जाएगा। यह परिवर्तन किसी भी तरह से जा सकता है, और आसानी से अनुमानित नहीं है।

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

2

मैं अगर यह सबसे अच्छा समाधान है पता नहीं है, लेकिन यह (जावा) मेरे लिए काम करता है:

// "tiny" search to discover maxScore 
// it is fast, because it returns only 1 item 
SearchResponse response = client.prepareSearch(INDEX_NAME) 
         .setTypes(TYPE_NAME) 
         .setQuery(queryBuilder) 
         .setSize(1) 
         .execute() 
         .actionGet(); 

// get the maxScore and 
// and set minScore = 70% 
float maxScore = response.getHits().maxScore(); 
float minScore = maxScore * 0.7; 

// second round with minimum score 
SearchResponse response = client.prepareSearch(INDEX_NAME) 
         .setTypes(TYPE_NAME) 
         .setQuery(queryBuilder) 
         .setMinScore(minScore) 
         .execute() 
         .actionGet(); 

मैं दो बार खोज, लेकिन क्योंकि यह केवल 1 आइटम रिटर्न पहली बार यह तेज़ है तो, हम max_score

नोट: minimal_should_match अलग-अलग काम कर सकता है। यदि आपके पास 4 प्रश्न हैं, और आप minimal_should_match = 70% कहते हैं, तो इसका मतलब यह नहीं है कि item.score> 70% होना चाहिए। इसका मतलब है कि आइटम प्रश्नों का 70% से मेल खाना चाहिए, कि कम से कम है 3/4

संबंधित मुद्दे