Elasticsearch'te oldukça yeniyim (biraz SQL deneyimi olsa da) ve şu anda uygun bir sorguyu bir araya getirmekle uğraşıyorum. 2 boole alanım var isPlayer
ve isEvil
bu bir giriş ya da true
veya false
üzerinde. Buna dayanarak, veri kümemi 4 gruba ayırmak istiyorum:
- ısPlayer: doğru, ısEvil: doğru
- ısPlayer: doğru, ısEvil: yanlış
- ısPlayer: false, ısEvil: true
- ısPlayer: yanlış, ısEvil: yanlış
Bu grupları kendi içlerinde rastgele sıralamak istiyorum, sonra bunları sayfalayabileceğim uzun bir listeye ekleyeceğim. Bunu sorgunun içinde yapmak istiyorum, çünkü SQL'DE benzer şekilde yapacağım için bunu yapmanın "doğru" yolu gibi görünüyor. Bu listede, gruplar sırayla sıralanmalıdır, bu nedenle önce Grup 1'in tüm girişleri rastgele bir sırayla, ardından Grup 2'nin tüm girişleri rastgele bir sırayla, ardından Grup 3'ün tüm girişleri vb. . Eğer aynı girişi verildiğinde, eğer sıralama varsa dayanarak eğer sıralama rastgele tekrarlanabilir elzemdir random_score
ideal olarak rastgelelik için bir tohum kullanıyor olurdum.
Tek bir sorgu oluşturabilirim, ancak 4'ü nasıl birleştirebilirim?
Şimdiye kadar bulduğum yaklaşımlar olarak Çoklu Arama ve Ayırma Max Sorgusu. Çoklu Arama, Sayfalandırmayı desteklemiyor gibi görünüyor. Disjunction Max Sorgusu ile ilgili olarak, ağaçlar için ormanı kaçırıyor olabilirim, ancak orada alt sorguların birbirlerine eklemeden önce yalnızca kendi içlerinde rastgele sıralanması konusunda mücadele ediyorum.
Şu an için tek bir sorguyu nasıl yazıyorum Disjunction Max Query
, yardımcı olması durumunda:
{
"query": {
"bool": {
"should": [
{
"term": {
"isPlayer": true
}
},
{
"term": {
"isEvil": true
}
}
]
}
}
}