2014-10-22 13 views
11

के आधार पर केवल अद्वितीय दस्तावेज़ों को फ़िल्टर करने के लिए फ़िल्टर करें मेरे सभी दस्तावेज़ों में uid फ़ील्ड है जो एक आईडी के साथ दस्तावेज़ को लिंक करता है। uid के साथ कई दस्तावेज़ हैं।फ़िल्टर लोचदार खोज परिणामों को एक फ़ील्ड मान

मैं प्रति अद्वितीय uid प्रति उच्चतम स्कोरिंग दस्तावेज़ लौटने वाले सभी दस्तावेजों पर एक खोज करना चाहता हूं।

प्रासंगिक दस्तावेजों का चयन करने वाली क्वेरी एक साधारण multi_match क्वेरी है।

उत्तर

18

आपको top_hits एकत्रीकरण की आवश्यकता है।

और अपने विशिष्ट मामले के लिए:

{ 
    "query": { 
    "multi_match": { 
     ... 
    } 
    }, 
    "aggs": { 
    "top-uids": { 
     "terms": { 
     "field": "uid" 
     }, 
     "aggs": { 
     "top_uids_hits": { 
      "top_hits": { 
      "sort": [ 
       { 
       "_score": { 
        "order": "desc" 
       } 
       } 
      ], 
      "size": 1 
      } 
     } 
     } 
    } 
    } 
} 

क्वेरी के ऊपर अपने multi_match क्वेरी निष्पादित और uid के आधार पर परिणामों को एकत्रित करती है। प्रत्येक यूआईडी बाल्टी के लिए यह केवल एक परिणाम देता है, लेकिन बाल्टी में सभी दस्तावेजों को क्रमबद्ध क्रम में _score के आधार पर क्रमबद्ध किया गया था।

+0

क्या परिणामी बाल्टी के माध्यम से पेजिंग करने का कोई अच्छा तरीका है? – TheHippo

+0

ऐसा लगता है कि [github] (https://github.com/elasticsearch/elasticsearch/issues/4915) में इसके बारे में एक लंबी चर्चा है। और यह एकमात्र मुद्दा नहीं है जहां इस पर चर्चा हुई थी। –

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