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_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,但将返回一个 scrollId 参数,该参数是对弹性搜索为您保存在内存中的剩余 resultSet 的引用。Parameters.SCROLL,将定义此搜索将保留在内存中的时间。

阅读scrollId:

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

要从结果集中读取更多项目,您应该使用以下内容:

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;

}

不要忘记,每次从结果集中读取时,都会从 elastic 返回一个新的 scrollId。

如果您有任何疑问,请告诉我。

于 2016-01-13T12:13:06.163 回答
8

同意我们需要赶上,但是如果您需要某个功能,请打开一个问题。

请在 master 处检查https://github.com/searchbox-io/Jest/blob/master/jest/src/test/java/io/searchbox/core/SearchScrollIntegrationTest.java

于 2013-05-21T07:05:21.913 回答
6

编辑:

JEST 目前似乎不支持“扫描”搜索类型:在一个邪恶的快速周转中,JEST 现在似乎支持扫描类型搜索!支持@Ferhat快速周转!JEST - SearchType.java


您是否考虑过只使用 ElasticSearch Transport 客户端?如果您更喜欢 JEST API,我可以理解,但是随着 ElasticSearch 推出新功能(图表 A:ElasticSearch 0.90 太棒了!),您将在它们弹出时立即拥有它们,而不是等待 JEST赶上。

我的 0.02 美元。

于 2013-05-21T01:33:59.763 回答