2013-05-21 16 views
6

Attualmente sto lavorando con JEST: https://github.com/searchbox-io/Jestelasticsearch Scan & scorrere con JEST API

E 'possibile fare la scansione & scorrimento con questa API?

http://www.elasticsearch.org/guide/reference/api/search/search-type/

Attualmente sto usando il comando Cerca:

Search search = new Search("{\"size\" : "+RESULT_SIZE+", \"query\":{\"match_all\":{}}}"); 

ma sono preoccupato per grandi insiemi di risultati. Se si utilizza il comando di ricerca per questo come si imposta il parametro "search_type = scan & scroll = 10m & size = 50"?

risposta

5

EDIT:

Non sembra che JEST attualmente supporta la "scansione" cerca: In un ritorno veloce malvagio, sembra che JEST ora supporta ricerche Tipo di scansione! Puntelli a @Ferhat per il rapido turnaround! JEST - SearchType.java


avete considerato solo utilizzando il client elasticsearch Trasporti? Potrei capire se ti piace l'API JEST un po 'meglio, ma mentre le nuove funzionalità si sviluppano per ElasticSearch (Exhibit A: ElasticSearch 0.90 is fantastic!), potrai ottenerle non appena escono, invece di aspettare che JEST lo raggiunga.

Mio $ 0,02.

+0

Grazie per il feedback.Bloccato tramite http per questa applicazione. –

+0

Vedo, vedo. Scusa, non potrei essere più di aiuto! – RustyBuckets

9

E 'possibile fare la scansione & scorrimento con questa API?

Sì, lo è. La mia implementazione funziona così.

avvia la ricerca di scorrimento sul elasticsearch:

public SearchResult startScrollSearch (String type, Long size) throws IOException { 

      String query = ConfigurationFactory.loadElasticScript("my_es_search_script.json"); 

      Search search = new Search.Builder(query) 
              // multiple index or types can be added. 
              .addIndex("myIndex") 
              .addType(type) 
              .setParameter(Parameters.SIZE, size) 
              .setParameter(Parameters.SCROLL, "1m") 
              .build(); 

       SearchResult searchResult = EsClientConn.getJestClient().execute(search); 
       return searchResult; 

     } 

oggetto SearchResult restituirà il primo (dimensione) itens fuori la ricerca, come al solito, ma tornerà ad un parametro scrollId che è un riferimento a rimanere resultSet che elasticsearch ti tiene in memoria. Parameters.SCROLL, definirà il tempo in cui questa ricerca verrà mantenuta in memoria.

Per leggere lo scrollId:

scrollId = searchResult.getJsonObject().get("_scroll_id").getAsString(); 

Per saperne di più itens dal resultSet si dovrebbe usare qualcosa come segue:

public JestResult readMoreFromSearch(String scrollId, Long size) throws IOException { 

    SearchScroll scroll = new SearchScroll.Builder(scrollId, "1m") 
       .setParameter(Parameters.SIZE, size).build(); 

     JestResult searchResult = EsClientConn.getJestClient().execute(scroll); 
     return searchResult; 

} 

Non dimenticate che ogni volta che si legge dal set di risultati un nuovo scrollId viene restituito dall'elastico.

Per favore dimmi se hai qualche dubbio.

+0

Questa è una risposta eccellente! grazie @pedro –

+0

sei il benvenuto @DarshanMehta –