Vis alle resultater i Elasticsearch query

Som standard returnere Elasticsearch altid 10 dokumenter, i mange tilfælde vil man have alle eller et andet antal end de 10.

Når du laver forespørgslen, kan du definer hvor mange resultater du vil have tilbage.
Via GET ser det sådan ud:

curl -XGET http://localhost:9200/_search?size=100

Dette vil returnere 100 resultater, hvis der er 100 at returnere.

Du kan også sætte det i JSON:

curl -XGET http://localhost:9200/_search -d {
    "size":100,
    "query": {
        "match_all" : {}
    }
}

På samme måde som i GET vil dette også returnere 100 resultater hvis der er 100 at returnere.

Det er ikke mig bekendt muligt at bede den om at hente alle uden at sætte en size på, så enten skal du satse på en size som du er sikker på er størren end det antal dokumenter der kan blive returneret, eller også skal du lave en ekstra forespørgsel hvor du finder ud af hvor mange dokumenter der er.
Elasticsearch returnere nemlig altid det antal dokumenter som den har søgt blandt for at komme frem til resultatet. Så hvis du først laver en forespørgdel med en size på 0, så vil du kunne aflæse hvor mange resultater der er at hente.

curl -XGET http://localhost:9200/_search -d {
    "size":0,
    "query": {
        "match_all" : {}
    }
}

Dette vil returnere noget i stil med følgende:

{
  "took" : 52,
  "timed_out" : false,
  "_shards" : {
    "total" : 40,
    "successful" : 40,
    "failed" : 0
  },
  "hits" : {
    "total" : 3260157,
    "max_score" : 0.0,
    "hits" : [ ]
  }
}

Så kan du aflæse at der i dette tilfælde totalt er 3360167. Dette kan du så sætte som size på din næste forespørgsel.

Leave a comment

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site uses Akismet to reduce spam. Learn how your comment data is processed.