La spécification de la taille totale de résultats à retourner pour ElasticSearch requête lors de l'utilisation inner_hits

ElasticSearch permet inner_hits pour définir "à partir de" et "taille" des paramètres, ainsi que l'extérieur du corps de la requête de recherche.

Par exemple, supposons que mon index contient 25 livres, chacun ayant moins de 50 chapitres. L'extrait de code ci-dessous, vous obtiendrez tous les chapitres de tous les livres, parce qu'un "volume" de 100 livres inclut tous de 25 livres, et une "taille" de 50 chapitres comprend tous "moins de 50 chapitres":

        "index": 'books',
        "type": 'book',
        "body": {
          "from" : 0, "size" : 100, //outer hits, or books
          "query": {
              "filtered": {
                "filter": {
                  "nested": {
                    "inner_hits": {
                      "size": 50 //inner hits, or chapters
                    },
                    "path": "chapter",
                    "query": { "match_all": { } }, 
                  }
                }
               }
            },
            .
            .
            .

Maintenant, j'aimerais mettre en œuvre la pagination avec un scénario comme celui-ci. Ma question est, comment?

Dans ce cas, dois-je retourner le au-dessus du maxi de 100 * 50 = 5000 documents à partir de la requête de recherche et de mettre en œuvre la pagination au niveau de l'application, en affichant uniquement la tranche je suis intéressé? Ou, est-il un moyen de spécifier le nombre total de visites à revenir en arrière dans la requête de recherche lui-même, indépendant de l'intérieur/extérieur taille?

Je suis à la recherche à la "réponse", comme suit, et qui seraient donc comme ces données pour être en mesure d'être paginé:

        response.hits.hits.forEach(function(book) {
           chapters = book.inner_hits.chapters.hits.hits;

           chapters.forEach(function(chapter) {
               //... this is one displayed result ...
           });
        });
  • Cela fonctionne pour ajouter la taille=5000 pour OBTENIR votre url par: elastic.co/guide/en/elasticsearch/guide/current/pagination.html
  • Je suis à l'aide de la "recherche" de la méthode dans le Node.js client (et d'activer le suivi montre qu'il est en train de faire un POST) et non pas de la construction de l'URL directement, cependant, je suis déjà à l'aide de 'taille' paramètres deux fois à l'endroit indiqué par l'extérieure des hits " et "intérieure hits" des commentaires dans mon code. 'taille' œuvres de limiter le parent documents en cours d'examen, et le nombre de imbriquée à l'intérieur des résultats retournés à l'intérieur de chacune de ces parents, mais j'ai essentiellement voulez être en mesure de spécifier la "taille" et " de " à travers l'ensemble de ce jeu.
  • pouvez-vous ajouter taille: 5000 au même niveau que l'indice: "les livres"? C'est la façon dont je limite le total des résultats dans le rubis client.
InformationsquelleAutor mmccaff | 2015-09-21