Je tente de partitionner un agrégat similaire à the example dans la documentation ElasticSearch, mais je ne parviens pas à faire fonctionner l'exemple.Partitionnement d'agrégats avec des groupes
L'indice est renseigné avec l'événement types:
public class Event
{
public int EventId { get; set; }
public string SegmentId { get; set; }
public DateTime Timestamp { get; set; }
}
Le EventId
est unique, et chaque événement appartient à un SegmentId
spécifique. Chaque SegmentId peut être associé à zéro à plusieurs événements.
La question est: Comment puis-je obtenir la dernière EventId
pour chaque SegmentId
?
Je m'attends à ce que le nombre de segments uniques soit de l'ordre de 10 millions, et le nombre d'événements uniques d'une ou deux fois supérieurs. C'est pourquoi je ne pense pas en utilisant top_hits
par lui-même est approprié, comme suggested here. Par conséquent, le partitionnement.
Exemple:
avoir établi une démonstration d'indice peuplé de 1313 documents uniques (EventId
), appartenant à 101 SegmentId
distinctes (à savoir 13 événements par segment). Je m'attendrais à ce que la requête ci-dessous fonctionne, mais les mêmes résultats sont renvoyés quel que soit le numéro partition
que je spécifie.
POST /demo/_search
{
"size": 0,
"aggs": {
"segments": {
"terms": {
"field": "segmentId",
"size": 15, <-- I want 15 segments from each query
"include": {
"partition": 0, <-- Trying to retrieve the first partition
"num_partitions": 7 <-- Expecting 7 partitions (7*15 > 101 segments)
}
},
"aggs": {
"latest": {
"top_hits": {
"size": 1,
"_source": [
"timestamp",
"eventId",
"segmentId"
],
"sort": {
"timestamp": "desc"
}
}
}
}
}
}
}
Si je supprime le include
et mis size
à une valeur supérieure à 101, je reçois le dernier événement pour chaque segment. Cependant, je doute que c'est une bonne approche avec un million de compartiments ...
Vous avez raison de dire que ce que je voulais était un défilement sur une agrégation, ce qui n'est pas supporté. Cependant, je l'ai résolu avec le partitionnement (voir ma réponse acceptée). Merci pour vos suggestions, cependant! Ils pourraient être utiles dans une autre situation! (: – Reyhn