【问题标题】:Elasticsearch Scan&scroll with JEST API使用 JEST API 进行 Elasticsearch 扫描和滚动
【发布时间】:2013-05-15 15:39:16
【问题描述】:

我目前正在与 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”参数?

【问题讨论】:

    标签: java rest lucene elasticsearch


    【解决方案1】:

    是否可以使用此 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 对象将像往常一样返回搜索的第一个(大小)iten,但会返回一个 scrollId 参数,该参数是对 elasticSearch 为您保存在内存中的剩余 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。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 有没有清除卷轴的例子? (PS:我知道这篇文章太老了。我宁愿使用 ES 客户端 API,但愚蠢的 Google AppEngine 讨厌它)。
      【解决方案3】:

      编辑:

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


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

      我的 0.02 美元。

      【讨论】:

      • 感谢您的反馈。在此应用程序中使用 http 时卡住了。
      • 我明白了,我明白了。抱歉,我无法提供更多帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多