ElasticSearch - संयोजन प्रश्नों के लिए 4 अलग बेतरतीब ढंग से sourted समूहों?

0

सवाल

मैं कर रहा हूँ काफी नया करने के लिए elasticsearch (हालांकि एक निष्पक्ष बिट SQL अनुभव) और वर्तमान में हूँ के साथ संघर्ष कर रही एक उचित क्वेरी । मैं 2 बूलियन फ़ील्ड isPlayer और isEvil है कि एक प्रविष्टि, या तो है true या false पर. उस आधार पर, मैं विभाजित करना चाहते हैं मेरे डेटासेट को 4 समूहों में:

  1. isPlayer: यह सच है, isEvil: यह सच है
  2. isPlayer: यह सच है, isEvil: झूठी
  3. isPlayer: झूठी, isEvil: यह सच है
  4. isPlayer: झूठी, isEvil: झूठी

इन समूहों मैं चाहता हूँ करने के लिए बेतरतीब ढंग से क्रमबद्ध स्वयं के भीतर है, तो उन्हें संलग्न किया जा करने के लिए एक लंबी सूची है कि मैं कर सकते हैं, पृष्ठ पर अंक लगाना. मैं क्या करना चाहते हैं कि प्रश्न के रूप में, की तरह लगता है कि "सही" जिस तरह से ऐसा करने के लिए, के बाद से मैं कर सकता हूँ यह इसी तरह SQL. उस सूची में, समूहों के लिए कर रहे हैं हल किया जा क्रम में, तो पहले सभी प्रविष्टियों के समूह 1 एक यादृच्छिक क्रम में, तो सभी प्रविष्टियों 2 समूह के एक यादृच्छिक क्रम में, तो सभी प्रविष्टियों के समूह 3 आदि. . यह आवश्यक है कि randomness की छँटाई प्रतिलिपि प्रस्तुत करने योग्य है, तो दिया ही आदानों, तो छँटाई पर आधारित है random_score आदर्श रूप में मैं का उपयोग किया था के लिए एक बीज randomness.

मैं का निर्माण कर सकते हैं एक ही प्रश्न, लेकिन मैं कैसे गठबंधन 4?

के रूप में दृष्टिकोण मैं अब तक पाया है MultiSearch और अलगाव अधिकतम क्वेरी. MultiSearch की तरह लगता है, यह समर्थन नहीं करता है, पृष्ठ पर अंक लगाना. के बारे में अलगाव अधिकतम प्रश्न यह हो सकता है कि मैं याद कर रहा हूँ पेड़ों के लिए जंगल है, लेकिन वहाँ मैं संघर्ष कर रहा हूँ होने में की जाने वाली सबक्वेरी हो बेतरतीब ढंग से हल के भीतर ही से पहले खुद को जोड़कर उन्हें एक दूसरे के लिए.

यहाँ मैं कैसे लिखने के लिए एक एकल क्वेरी के लिए अब बिना Disjunction Max Queryमामले में , यह मदद करता है:

{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "isPlayer": true
          }
        },
        {
          "term": {
            "isEvil": true
          }
        }
      ]
    }
  }
}
elasticsearch
2021-11-22 13:35:49
1

सबसे अच्छा जवाब

0

इस समस्या का समाधान नहीं कर रही है, 4 अलग-अलग समूहों, लेकिन इसके बजाय यह सुनिश्चित करने के वे सब अलग अलग श्रेणियों के स्कोर और छँटाई के द्वारा स्कोर । यह हासिल किया जा सकता है, स्कोरिंग द्वारा हिट नहीं के कुछ प्रकार के द्वारा मिलान मापदंड है, लेकिन एक स्क्रिप्ट के माध्यम से स्कोर क्षेत्र है. इस क्षेत्र की अनुमति देता है, आप कोड लिखने के लिए अपने आप को देता है कि एक तर्क स्कोर (डिफ़ॉल्ट भाषा कहा जाता है "दर्द रहित", लेकिन मैंने देखा है उदाहरण के groovy के रूप में अच्छी तरह से).

तर्क काफी सरल है:

  1. अगर isPlayer = सच जोड़ने के लिए, 2 अंक स्कोर करने के लिए
  2. अगर isEvil = सच जोड़ने के लिए, 4 अंक स्कोर करने के लिए
  3. किसी भी तरह से जोड़ने के लिए, एक यादृच्छिक संख्या 0 और 1 के बीच स्कोर करने के लिए अंत में

इस बनाता है 4 समूहों मैं चाहता था के साथ अलग स्कोर पर्वतमाला:

  1. isPlayer = सच, isEvil = सच --> स्कोर रेंज: 6-7
  2. isPlayer = झूठी, isEvil = सच --> स्कोर रेंज: 4-5
  3. isPlayer = सच, isEvil = झूठी --> स्कोर रेंज: 2-3
  4. isPlayer = झूठी, isEvil = झूठी --> स्कोर रेंज: 0-1

क्वेरी इस तरह दिखेगा:

  "query": {
    "script_score": {
      "query": {
        "match_all": {}
      },
      "script": {
        "source": """
            double score = 0;
            if(doc['isPlayer']){
              score += 2;
            }
            
            if(doc['isEvil']){
              score += 4;
            }
            
            int partialSeed = 1;
            score += randomScore(partialSeed, 'id');
            return score;
        """
      }
    }
  }
}
2021-11-24 08:51:50

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में