流总是空的 - 除非我给它时间

时间:2016-04-13 13:29:18

标签: java elasticsearch

我在理解java流方面遇到了一些麻烦。我创建了一个JUnit测试,它基本上将一个元素存储在数据库中,检索它(结果在流中返回),然后比较这两个元素。测试失败,所以我开始调试。突然,测试通过了。结果我的断点给了流需要建立的时间?!

@Test
public void matchAllTest() {
    client.insert(object); //database schema is empty

    Stream<Object> stream = client.query("{ query matching all objects }");

    Object firstResult = stream.findFirst().get();
    assertObjectEquals(object, firstResult);
}

query与Elasticsearch一起用作数据库,如下所示:

public Stream<Object> query(String query) {
    SearchRequestBuilder request = client.prepareSearch("index");
    request.setQuery(query);

    Stream.Builder<Object> stream = Stream.builder();

    SearchResponse response = request.get();
    SearchHits hits = response.getHits();
    hits.forEach(object -> stream.accept(object);

    return stream.build();
}
测试中的

client是指使用query方法的类。第二个代码段中的client引用了一个Elasticsearch节点客户端,请参阅ES Java docs

测试失败,出现NoSuchElementException(&#34;没有值和#34;) - 除非我给它时间。

这里到底发生了什么,如何避免异常?

1 个答案:

答案 0 :(得分:1)

问题是文档只能在elasticsearch中刷新后搜索。

要进行测试,您可以强制refresh