7

現在、JEST を使用しています: https://github.com/searchbox-io/Jest

このAPIでスキャン&スクロールはできますか?

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

現在、検索コマンドを使用しています:

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

しかし、大きな結果セットが心配です。これに Search コマンドを使用する場合、「search_type=scan&scroll=10m&size=50」引数をどのように設定しますか?

4

3 に答える 3

14

このAPIでスキャン&スクロールはできますか?

はい、そうです。私の実装はこのように機能しています。

エラスティック検索でスクロール検索を開始します。

    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;

        }

SearchResult オブジェクトは、通常どおり検索から最初の (サイズの) itens を返しますが、elasticSearch がメモリに保持する resultSet を維持するための参照である scrollId パラメータに戻ります。Parameters.SCROLL は、この検索がメモリに保持される時間を定義します。

scrollId を読み取るには:

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

resultSet からさらに項目を読み取るには、次のようなものを使用する必要があります。

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;

}

結果セットから読み取るたびに、エラスティックから新しい scrollId が返されることを忘れないでください。

ご不明な点がございましたら、おっしゃってください。

于 2016-01-13T12:13:06.163 に答える