我是弹性搜索的新手,我读到我们可以使用elasticsearch来查询其余的API调用。
我正在阅读以下链接: http://blogs.justenougharchitecture.com/using-jest-as-a-rest-based-java-client-with-elasticsearch/
这是正确的方法吗?
此外,我不想限制我的搜索将返回的结果数量(它可以返回数百万条记录)。
那么java中的ResultSet如何工作,表可能有数百万行,但我们可以一次迭代一行并只处理它,而不是将它存储在我的java堆中的任何地方),因此不必担心java堆空间,类似地我想做一些类似于弹性搜索查询的话,如果可能的话(我想要查询中的所有记录),但是在迭代它们时不要将它们全部放在我的记忆中。
是否可以使用任何java客户端(通过rest API),如果不是通过rest API,那么是否有解决此问题的方法。
由于
答案 0 :(得分:1)
首先,如果您使用Java或其他JVM语言,您还可以使用native client。如果你想让你的依赖关系变小(java客户端与整个服务器基本相同),或者你只想通过HTTP接口而不是通过其二进制接口访问Elasticsearch,那么Jest是一个不错的选择。
其次,您要使用的是滚动API:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html(虽然没有找到关于Jest文档的快速参考)。 它并不像ResultSet那样完全正常工作,但允许您在所有结果上迭代。一个例子,从文档中复制
QueryBuilder query = ...;
SearchResponse scrollResponse = client.prepareSearch(index)
.setSearchType(SearchType.SCAN)
.setScroll(new TimeValue(60000)) // timeout
.setQuery(query)
.setSize(100) // bulk size
.execute().actionGet();
//Scroll until no hits are returned
while (!scrollResp.getHits().getHits().isEmpty()) {
for (SearchHit hit : scrollResp.getHits().getHits()) {
//Handle the hit...
}
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId())
.setScroll(new TimeValue(60000))
.execute().actionGet();
}