![](/img/trans.png)
[英]Elasticsearch SearchContextMissingException during 'scan & scroll' query with Spring Data Elasticsearch
[英]Elasticsearch Scan&scroll with JEST API
我目前正在與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”參數?
是否可以使用此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參數,該參數是一個引用,以保留elasticSearch為您保留在內存中的resultSet。 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。
如果您有任何疑問,請告訴我。
同意我們需要趕上但是如果你需要一個功能,請打開一個問題。
編輯:
似乎JEST目前不支持“掃描”搜索類型:
在惡劣的快速周轉中,似乎JEST現在支持掃描類型搜索! 推特到@Ferhat進行快速周轉! JEST - SearchType.java
您是否考慮過使用ElasticSearch Transport客戶端? 我可以理解你是否更喜歡JEST API,但隨着ElasticSearch推出新功能( 圖表A:ElasticSearch 0.90太棒了! ),你可以在彈出時立即使用它們而不是等待JEST趕上來。
我的0.02美元。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.