当我尝试为数据建立索引然后进行查询时,一切都很好,但是如果我启动我的应用程序并且在不进行索引的情况下进行查询,那么我会收到该错误
Exception in thread "main" org.elasticsearch.action.search.SearchPhaseExecutionException: Failed to execute phase [query_fetch], all shards failed at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.onFirstPhaseResult(TransportSearchTypeAction.java:272) at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction$3.onFailure(TransportSearchTypeAction.java:224) at org.elasticsearch.search.action.SearchServiceTransportAction.sendExecuteFetch(SearchServiceTransportAction.java:307) at org.elasticsearch.action.search.type.TransportSearchQueryAndFetchAction$AsyncAction.sendExecuteFirstPhase(TransportSearchQueryAndFetchAction.java:71) at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.performFirstPhase(TransportSearchTypeAction.java:216) at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.performFirstPhase(TransportSearchTypeAction.java:203) at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction$2.run(TransportSearchTypeAction.java:186) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)
这是我的elasticsearch代码和设置
// settings ImmutableSettings.Builder settings = ImmutableSettings.settingsBuilder(); settings.put("client.transport.sniff", false); settings.put("path.home", "/path/to/elastic/home"); settings.put("index.number_of_replicas", 0); settings.put("index.number_of_shards", 1); settings.put("action.write_consistency", "one"); settings.build(); // creating of node and client NodeBuilder nb = new NodeBuilder().settings(settings).local(true).data(true); Node node = nb.node(); Client client = node.client(); /* for (int i = 0; i <= 15; i++) { IndexResponse response = client.prepareIndex("twitter2", "tweet2", String.valueOf(i)) .setSource(json1) .execute() .actionGet(); } */ searchRequestBuilder = client.prepareSearch("twitter2") .setTypes("tweet2") .setQuery(QueryBuilders.matchQuery("user", "user0")) .setQuery(QueryBuilders.matchQuery("message","message1")) .setExplain(true) .setSearchType(SearchType.DFS_QUERY_AND_FETCH).setSize(200); SearchResponse searchRespons = searchRequestBuilder.execute().actionGet(); // here is error
我的设置有什么问题?
您可以在添加睡眠10秒后尝试相同的方法吗
Client client = node.client();
我觉得Elasticsearch在您找到搜索请求之前还没有恢复碎片。甚至管理员呼叫“等待黄色”也应该为您工作