elasticsearch:无法找到索引数据(节点已关闭)

3

我试着开始使用elasticsearch(之前一直使用compass),但是我遇到了一些非常严重的基础问题,这让我感到非常沮丧。

目前我面临的问题是索引数据只有在节点关闭后才会显示出来。以下是我的代码示例:

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”开头的名称(别让我对索引项自动小写但不搜索感到困惑,这花费了我一个多小时)。
如果我删除关闭语句,无论我运行多少次以上代码,我永远不会找到结果。但是,如果我添加关闭语句,第二次就可以正常工作(每次都可以)。
感觉像是缓冲索引更改而未刷新导致的问题?
我确定我错过了一些明显和基础的东西。但我就是摸不着头脑。
1个回答

5

在执行最新变更的搜索之前,您需要刷新索引。将此操作放在索引之后,搜索之前:

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

默认情况下,Elasticsearch会每隔1秒钟调用一次refresh


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接