2015-05-20 15 views
6

मैं एक दस्तावेज़ की तरहलोचदार खोज सरणी स्कोर

doc1

{ 
"item_type":"bag", 
"color":["red","blue","green","orange"] 
} 

doc2 एक सरणी है

{ 
"item_type":"shirt", 
"color":["red"] 
} 

जब मैं करता हूँ

{ "query": { "multi_match": { "query": "red bag", "type": "cross_fields", "fields": ["item_type","color"] } } }

की तरह एक multi_match खोज

डॉक 2 में बहुत अधिक स्कोर है, मुझे लगता है कि दायर रंग में कम आइटम उच्च स्कोर प्राप्त करते हैं और यदि मेरे पास doc1 में अधिक रंग हैं तो यह और भी बदतर हो जाता है।

तो क्या कोई तरीका है कि मैं एलास्टिक फ़ीर्च को एक सरणी क्षेत्र के लिए स्कोर करने के लिए कह सकता हूं इससे कोई फर्क नहीं पड़ता कि कितने आइटम हैं?

+0

क्या आप 'multi_match' का उपयोग करना चाहते हैं इससे कोई फर्क नहीं पड़ता कि क्या? –

+0

क्या आप बेहतर परिणाम प्राप्त करते हैं यदि आप '' use_dis_max "जोड़ते हैं: झूठी 'आपके' multi_match' पर? –

+0

use_dis_max: झूठी मदद नहीं करता –

उत्तर

4

यदि आप स्कोरिंग के दौरान फ़ील्ड लम्बाई (फ़ील्ड नॉर्म) के लिए खाता नहीं लेना चाहते हैं तो आप मैपिंग में किसी फ़ील्ड के लिए norms अक्षम कर सकते हैं।

उदाहरण के लिए ऊपर के उदाहरण के लिए मानचित्रण होगा

{ 
    "properties": { 
     "item_type": { 
     "type": "string" 
     }, 
     "color": { 
     "type": "string", 
     "norms": { 
      "enabled": false 
     } 
     } 
    } 
} 

यह article elasticsearch निश्चित गाइड से क्षेत्र-लंबाई-मानदंडों में एक अच्छा अंतर्दृष्टि देता है।

+0

धन्यवाद केटी, आपने मेरा दिन बचाया! –

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