ElasticSearch-การรวมพลังที่กระจัดการค้นข้อมูลสำหรับ 4 seperate นโดยบังเอิญ sourted กลุ่ม?

0

คำถาม

ฉันค่อนข้างจะเป็นคนใหม่เพื่อ elasticsearch(แม้ว่ากับความเป็นธรรมของภาษา sql ประสบการณ์)และคือปัจจุบันกำลังพยายามอย่างหนักกับเรื่องที่เหมาะสมกับการค้นหาด้วยกัน ฉันต้อง 2 ตรรกะช่องข้อมูล isPlayer แล้ว isEvil นั่นเป็นรายการก็คือมือ true หรือ false ย จากนั้นฉันต้องการที่จะแยกของฉันวันที่เข้าไปใน 4 กกลุ่ม:

  1. isPlayer:เรื่องจริง isEvil:เรื่องจริง
  2. isPlayer:เรื่องจริง isEvil:ปลอม
  3. isPlayer:ผิ isEvil:เรื่องจริง
  4. isPlayer:ผิ isEvil:ปลอม

พวกกลุ่มฉันอยากจะแบบสุ่มแบบภายในตัวเองแล้วให้แนบเป็นสิ่งที่แนบมาด้วยที่พวกเขาเป็นหนึ่งนานมารายชื่อที่ฉันสามารถ paginate. ฉันอยากจะทำอย่างนั้นอยู่ในการสืบค้นที่นั่นดูเหมือนที่"ถูก"ทางที่จะทำอย่างนี้ตั้งแต่ฉันจะทำมันเหมือนๆกันในภาษา sql. อยู่ในรายชื่อคนกลุ่มต้องจัดเรียงเรียบร้อยลำดังนั้นคนแรกรายการทั้งหมดของกลุ่ม 1 ในแบบสุ่มลำดับแล้วล่ะก็งั้นมันก็เป็นสิ่งรายการของกลุ่ม 2 ในการสุ่มลำดับแล้วล่ะก็งั้นมันก็เป็นสิ่งรายการของกลุ่ม 3 คนเป็นต้น . มันเป็นจำเป็นต้องว่าความไร้แบบแผนของการเรียงลำดับคือ reproducible ถ้าให้เหมือนกั inputs ดังนั้นถ้าเรียงลำดับไอคอนเป็นเรื่องเกี่ยวกับพว random_score เข้าท่าดีนิเราจะทำทุกอย่างที่เราทำฉันจะใช้เมล็ดพันธ์สำหรับความไร้แบบแผน.

ฉันสามารถสร้างเดียวกับการค้นหา,แต่ยังไงฉันรวม 4?

ที่เข้ามาใกล้แล้วผมเจอตอนนี้ MultiSearch และ Disjunction แม็กซ์กับการค้นหา. MultiSearch ดูเหมือนมัน ไม่สนับสนุน Pagination. เกี่ยวกับ Disjunction แม็กซ์กับการค้นหามันอาจจะเป็นว่าฉันหายตัวไปในป่าเพื่อที่ต้นไม้พวกนั้นแต่ฉันกำลังพยายามอยู่ในค subqueries เป็นโดยบังเอิญจัดเรียงเรียบร้อยเท่านั้นภายในตัวเองก่อนที่ appending พวกเขาให้คนอื่น

นี่ฉันเขียนนัดเดียวกับการค้นหาสำหรับตอนนี้ไม่มี Disjunction Max Queryเผื่อมันจะช่วย:

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

คำตอบที่ดีที่สุด

0

ทางนี้ปัญหาคือไม่ได้ทำ 4 แยกกลุ่มแต่แทนที่จะเป็น ensuring พวกเขาทุกคนก็มีต่างออกช่วงของแนนและการเรียงลำดับโดยคะแนน. นี่เป็นประสบความสำเร็จด้วยคะแนนที่ทำร้ายไม่ได้โดยบางอย่างตรงกับเงื่อนไขการเรียงลำดับแต่งผ่านสคริปต์-คะแนนสนามรบ ช่องข้อมูลนี้จะอนุญาตให้คุณต้องเขียนรหัสตัวเองว่าจะได้ค่าเป็นตรรกะคะแนน(ค่าปริยายภาษาที่เรียกว่า"วามเจ็บปว"แต่ฉันเคยเห็นตัวอย่างของวิเศษมากเช่นกัน).

ที่ตรรกะญาค่อนข้างง่าย:

  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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่