elasticsearch – 没有为注册的查询]

我试图从我的测试中向ES发送请求。 我将映射和插入的文档应用于同一测试中名为’gccount_test’的ES索引 。 我在一个名为member的文件中维护了一个非常简单的查询,我想测试它。

 { "query" : { "match_all" : {} } } 

我的测试方法是

 public void testMemberQuery(){ final Charset CHARSET = StandardCharsets.UTF_8 //load query byte[] bytes = Files.readAllBytes(Paths.get(MEMBER_QUERY_PATH)) String query = CHARSET.decode(ByteBuffer.wrap(bytes)).toString() println "QUERY => ${query}" SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder() searchSourceBuilder.query(query) SearchRequestBuilder searchRequestBuilder = client.prepareSearch(INDEX_NAME) //ClusterAdminClient adminClient = client.admin().cluster() //searchRequestBuilder.setTypes(Constants.ESTYPE_MEMBER) //println "CLUSTER => ${adminClient}" searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH); searchRequestBuilder.internalBuilder(searchSourceBuilder) SearchResponse searchResponse = searchRequestBuilder.execute().actionGet() println "Search Response => ${searchResponse.toString()}" //blah blah } 

不幸的是,我得到了以下错误。

 Failed to execute phase [query_fetch], total failure; shardFailures {[1][gccount][0]: SearchParseException[[gccount_test][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"query_binary":"ewogICAgInF1ZXJ5IiA6IHsgCiAgICAgICAgICAibWF0Y2hfYWxsIiA6IHt9IAogICAgIH0KfQ=="}]]]; nested: QueryParsingException[[gccount_test] No query registered for [query]]; } org.elasticsearch.action.search.SearchPhaseExecutionException: Failed to execute phase [query_fetch], total failure; shardFailures {[1][gccount_test][0]: SearchParseException[[gccount_test][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"query_binary":"ewogICAgInF1ZXJ5IiA6IHsgCiAgICAgICAgICAibWF0Y2hfYWxsIiA6IHt9IAogICAgIH0KfQ=="}]]]; nested: QueryParsingException[[gccount_test] No query registered for [query]]; } at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.onFirstPhaseResult(TransportSearchTypeAction.java:261) at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction$3.onFailure(TransportSearchTypeAction.java:214) at org.elasticsearch.search.action.SearchServiceTransportAction.sendExecuteFetch(SearchServiceTransportAction.java:246) at org.elasticsearch.action.search.type.TransportSearchQueryAndFetchAction$AsyncAction.sendExecuteFirstPhase(TransportSearchQueryAndFetchAction.java:75) at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.performFirstPhase(TransportSearchTypeAction.java:206) at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.performFirstPhase(TransportSearchTypeAction.java:193) at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction$2.run(TransportSearchTypeAction.java:179) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) 

我正在使用elasticsearch 0.90.2 dependecy

 [group: 'org.elasticsearch', name: 'elasticsearch', version: '0.90.2'] 

在真实环境中运行良好(下面的快照)

在此处输入图像描述

从文件加载查询导致它的错误或什么时出现问题?

该exception基本上意味着“没有称为查询的已知查询类型”。 我猜你的客户端库是自动插入顶级query属性,所以你生成的查询实际上是这样的:

 { "query" : { "query" : { "match_all" : {} } } } 

如果您的客户端可以转储查询的JSON表示,那么这可以帮助调试很多。

尝试从文本文件中删除query部分,以便它只是match_all查询,看看它是否适合您。