2013-05-21 5 views
6

ich zur Zeit mit JEST arbeiten am: https://github.com/searchbox-io/JestElasticsearch Scan & blättern mit JEST API

Ist es möglich, mit dieser API Scan & Blättern zu tun?

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

ich zur Zeit bin mit dem Suchbefehl:

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

aber mache mir Sorgen um große Ergebnismengen. Wenn Sie den Suchbefehl für diese verwenden, wie setzen Sie die "search_type = scan & scroll = 10m & Größe = 50" Argumente?

Antwort

5

EDIT:

Es ist nicht, dass JEST unterstützt erscheint derzeit den "Scan" Suchtyp: In einem bösen schnellen Rücklauf, scheint es, dass JEST unterstützt jetzt Scan-Typ sucht! Requisiten zu @Ferhat für den schnellen Turnaround! JEST - SearchType.java


Haben Sie darüber nachgedacht, nur den Client Elasticsearch Transport mit? Ich könnte verstehen, wenn Sie die JEST-API ein wenig besser mögen, aber sobald neue Funktionen für ElasticSearch (Exhibit A: ElasticSearch 0.90 is fantastic!) eingeführt werden, werden Sie sie bekommen, sobald sie herauskommen, anstatt darauf zu warten, dass JEST aufholt.

Meine $ 0,02.

+0

Danke für die Rückmeldung.Stuck mit http für diese Anwendung. –

+0

Ich sehe, ich verstehe. Entschuldigung, ich könnte nicht mehr Hilfe sein! – RustyBuckets

9

Ist es möglich, Scan & Rolle mit dieser API zu tun?

Ja ist es. Meine Implementierung funktioniert so.

die Scroll-Suche auf Elasticsearch Start:

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; 

     } 

Search Objekt wird die erste (Größe) zurückzukehren itens die Suche wie gewohnt aus, aber zu einem scrollId Parameter zurück, der eine Referenz ist resultSet zu bleiben, dass Elasticsearch hält im Gedächtnis für dich. Parameter.SCROLL definiert die Zeit, für die diese Suche im Speicher gehalten wird.

Zum Lesen der scrollId:

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

Weitere itens vom resultSet lesen Sie so etwas wie Follow verwenden sollten:

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; 

} 

Vergessen Sie nicht, dass jedes Mal, wenn Sie aus der Ergebnismenge gelesen Eine neue scrollId wird von elastic zurückgegeben.

Bitte sagen Sie mir, wenn Sie irgendwelche Zweifel haben.

+0

Dies ist eine ausgezeichnete Antwort! Danke @pedro –

+0

Sie sind herzlich willkommen @ DarshanMehta –

Verwandte Themen