web-dev-qa-db-fra.com

elasticsearch - Aucune requête enregistrée pour [requête]]

J'essaie d'envoyer une demande à ES à partir de mes tests. J'ai appliqué le mappage et inséré des documents à l'index ES nommé 'gccount_test' à partir du même test . J'ai une requête très simple maintenue dans un fichier nommé member que je veux tester.

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

Ma méthode de test est

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 
    }

Malheureusement, je reçois l'erreur suivante.

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)

J'utilise la dépendance Elasticsearch 0.90.2

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

La même chose fonctionne bien dans un environnement réel (instantané ci-dessous)

enter image description here

Le problème avec le chargement de la requête à partir du fichier est-il à l'origine de sa malformation ou quoi?

20
prayagupd

L'exception signifie essentiellement "Il n'y a pas de type de requête connu appelé query". Je suppose que votre bibliothèque cliente insère automatiquement la propriété query de niveau supérieur, de sorte que votre requête générée ressemble en fait à ceci:

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

Si votre client peut vider la représentation JSON de la requête, cela peut beaucoup aider au débogage.

Essayez de supprimer la partie query de votre fichier texte afin qu'elle ne soit que la match_all requête, voyez si cela fonctionne pour vous.

39
Zach

votre chaîne de requête doit être

String query = "{\"match_all\":{}}";

vous pouvez voir d'ici

https://discuss.elastic.co/t/parsingexception-in-elastic-5-0-0/64626

0
riverfan