2013-02-12 13 views
10

Quindi domanda molto basilare su elasticsearch che i documenti non rispondono molto chiaramente (perché sembrano andare in molti dettagli avanzati ma mancano quelli di base!).Query di intervallo in ElasticSearch (GET senza corpo)

Esempio: query gamma

http://www.elasticsearch.org/guide/reference/query-dsl/range-query.html

non dice come eseguire la gamma, è tramite l'endpoint di ricerca?

E se lo è, allora come farlo tramite querystring? Voglio dire, voglio fare un GET, non un POST (perché è una query, non un inserimento/modifica). Tuttavia la documention per le richieste GET non dice come utilizzare JSON come nel campione Intervallo:

http://www.elasticsearch.org/guide/reference/api/search/uri-request.html

Che cosa mi manca?

Grazie

+0

Ci sono [opzioni comuni] (https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html) a molte domande –

risposta

0

Come rispondere a me stesso grazie a @javanna:

Nella sezione RequestBody dei documenti di ricerca:

http://www.elasticsearch.org/guide/reference/api/search/request-body.html

Alla fine, si dice:

Il resto della richiesta di ricerca dovrebbe essere passato all'interno del corpo stesso. Il contenuto del corpo può anche essere passato come parametro REST denominato source.

quindi credo che ho bisogno di utilizzare l'endpoint di ricerca con l'attributo source di passare JSON.

+0

puoi spiegare come stai usando l'attributo source con l'endpoint di ricerca per ottenere gamma di lavoro? - Sto riscontrando un problema simile con gli intervalli di date, formato yyyyMMddHHmmss nel corpo di JSON – Kausty

+0

Nevermind, credo di averlo trovato qui (+1 per la domanda in primo luogo) - http://stackoverflow.com/questions/12988201/ passing-json-data-in-elasticsearch-get-request-using-rest-client-ruby-gem – Kausty

+0

scusa è stato un tempo molto grande dal momento che non uso elasticsearch – knocte

7

Supponiamo che abbiamo un indice

curl -XPUT localhost:9200/test

e alcuni documenti

curl -XPUT localhost:9200/test/range/1 -d '{"age": 9}' 
curl -XPUT localhost:9200/test/range/2 -d '{"age": 12}' 
curl -XPUT localhost:9200/test/range/3 -d '{"age": 16}' 

Ora possiamo interrogare questi documenti entro un certo intervallo tramite

curl -XGET 'http://localhost:9200/test/range/_search?pretty=true' -d ' 
{ 
    "query" : { 
     "range" : { 
      "age" : { 
       "from" : "10", 
       "to" : "20", 
       "include_lower" : true, 
       "include_upper": true 
      } 
     } 
    } 
} 
' 
.210

Ciò restituirà i documenti 2 e 3.

non sono sicuro se c'è un modo per eseguire questo tipo di ricerche complesse tramite URI request, però.

Edit: Grazie a Karmi qui è la soluzione senza richiesta di JSON:

curl -XGET --globoff 'localhost:9200/test/range/_search?q=age:["10"+TO+"20"]&pretty=true'

+0

Mi dispiace, il titolo di questa domanda indica chiaramente "senza postino" quindi sto downvoting questo – knocte

+0

+1 ha usato il metodo 'get' per correggere il risultato –

+0

è ancora un corpo – knocte

14

Utilizzare la Lucene query syntax:

curl -X GET 'http://localhost:9200/my_index/_search?q=my_field:[0+TO+25]&pretty' 
+1

meh, sto cercando ancora usando la sintassi json – knocte

+1

Questa è ovviamente una soluzione migliore - in la tua domanda, ti chiedi esplicitamente come farlo senza la definizione di JSON DSL. – karmi

+1

dove lo leggi? Dico "il documentario per le richieste GET non dice come usare JSON come nell'esempio di intervallo" quindi ovviamente sto cercando la soluzione JSON – knocte

Problemi correlati