elasticsearch:找不到索引数据(单元节点已关闭)

时间:2013-11-16 20:18:22

标签: java elasticsearch

我正在尝试开始使用elasticsearch(一直是一个长期的罗盘用户),而且我在基础知识方面遇到了一些相当严重的问题,这非常令人沮丧。

我面临的当前问题是,在节点关闭之后,索引数据才会显示。这是我的代码示例

Node node = nodeBuilder().node();
Client client = node.client();

client.prepareIndex("index1", "type1", "1").setSource("{ \"name\": \"Aaron\"}").execute().actionGet();
client.prepareIndex("index1", "type1", "2").setSource("{ \"name\": \"Andrew\"}").execute().actionGet();
client.prepareIndex("index1", "type1", "3").setSource("{ \"name\": \"Alistair\"}").execute().actionGet();

QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name", "a*");
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("index1");
searchRequestBuilder.setTypes("type1");
searchRequestBuilder.setSearchType(SearchType.DEFAULT);
searchRequestBuilder.setQuery(queryBuilder);

SearchResponse response = searchRequestBuilder.execute().actionGet();
System.out.println("Response contains " + response.getHits().totalHits() + " hits");
for (SearchHit currentHit : response.getHits())
{
    System.out.println(currentHit.getSourceAsString());
}

client.close();
node.close();

我第一次运行它时,它在搜索中找不到匹配。但是,如果我再次运行它 - 它确实找到所有以字母“A”开头的名称(不要让我开始自动降低索引项目,但不是搜索 - 这花了我一个多小时)。

如果我卸下收盘,我运行上述次数并不重要,我从未找到结果。但是,如果我添加close语句,它会第二次(每次)。

感觉就像没有刷新的缓冲索引更改有关吗?

我确信我遗漏了一些明显和基本的东西。但我不能把手指放在上面。

1 个答案:

答案 0 :(得分:5)

在您能够搜索最新更改之前,您希望refresh索引。在执行搜索之前将其放在索引之后:

client.admin().indices().prepareRefresh("index1").execute().actionGet();

使用默认设置,Elasticsearch将每隔1秒定期调用refresh