2017-05-30 3 views
1

J'ai une requête d'assemblage dans une requête phrase_suggestion dans ES 5.2. Pour ce faire, ma requête d'assemblage est un modèle de moustache en ligne. Cependant, j'obtiens une erreur d'exception d'E/S me disant qu'il y a un caractère '}' inattendu lorsque je passe un objet filtre à ma requête avec la balise toJson moustache.Exception d'E/S Elasticsearch lors de la phase de suggestion avec une requête d'assemblage en ligne

Ce qui est surprenant, c'est que mon modèle de requête semble être OK lorsque j'utilise le point de terminaison _search/template. Je ne reçois aucune erreur de cette façon.

Voici ma question:

{ 
    "index": "arrets27", 
    "type": "arret", 
    "body": { 

     "suggest": { 
      "text": "secs, Bovero,", 
      "simple_phrase": { 
       "phrase": { 
        "field": "contenu_html.trigram", 
        "size": 1, 
        "gram_size": 3, 
        "max_errors": 2, 
        "confidence": 2.5, 
        "direct_generator": [{ 
         "field": "contenu_html.trigram", 
         "suggest_mode": "always" 
        }, { 
         "field": "contenu_html.reverse", 
         "suggest_mode": "always", 
         "pre_filter": "reverse", 
         "post_filter": "reverse" 
        }, { 
         "field": "contenu_html.nostem_with_accents", 
         "suggest_mode": "missing" 
        }], 
        "collate": { 
         "query": { 
          "params": { 
           "filters": [{ 
            "bool": { 
             "should": [{ 
              "term": { 
               "juridiction.raw": "CE" 
              } 
             }] 
            } 
           }, { 
            "bool": { 
             "should": [{ 
              "term": { 
               "search_access.raw": "ALL" 
              } 
             }, { 
              "term": { 
               "search_access.raw": "FREE_TRIAL" 
              } 
             }, { 
              "term": { 
               "search_access.raw": "RESTRICTED" 
              } 
             }] 
            } 
           }] 
          }, 
          "inline": "{\"bool\":{\"must\":[{\"multi_match\":{\"query\":\"{{suggestion}}\",\"analyzer\":\"query_analyzer\",\"type\":\"cross_fields\",\"fields\":[\"doc_id^2\",\"search_title^0.1\",\"formation^2\",\"form_dec_att^1\",\"president^1\",\"avocat_gl^1\",\"avocats^1\",\"rapporteur^1\",\"commissaire_gvt^1\",\"citation_jp^0.05\",\"keywords^2\",\"liens^2\",\"numero^4\",\"numero_affaire^4\",\"other_numbers^4\",\"solution^2\",\"nature^2\",\"ville^2\",\"siege_appel^2\",\"juri_prem^2\",\"lieu_prem^2\",\"ecli^2\",\"reference_url^2\",\"wikipedia^100\",\"ancien_id^2\",\"type_rec^2\",\"nor^2\",\"nature_qualifiee^2\",\"loi_def^2\",\"titre_jo^2\",\"loi_def_nor^2\",\"loi_def_num^2\",\"saisines^2\",\"observations^2\",\"publi_bull_ref^4\",\"ref_numeros_affaires^2\",\"organisations^2\",\"issue^2\",\"resolution_number^2\",\"doctype_branch^2\",\"legifrance_ref^2\",\"reference_citation^2\",\"inpi_ref^2\",\"inpi_partan^0.1\",\"inpi_marq^0.1\",\"inpi_prod^2\",\"inpi_ti^2\",\"inpi_obj^2\",\"inpi_cib^2\",\"inpi_ct^2\",\"demandeurs_names^0.1\",\"defendeurs_names^0.1\",\"comment_titles^1\",\"citation_titles^0.1\",\"contenu_html^1\",\"saisines_html^2\",\"observations_html^2\",\"sommaire_ana^2\",\"comment_contents^0.5\",\"citation_contents^0.05\"],\"operator\":\"and\"}}],\"filter\":{{#toJson}}filters{{/toJson}}}}" 
         }, 
         "prune": true 
        } 
       } 
      } 
     } 
    } 
} 

Voici le journal des erreurs que je reçois dans ES:

[2017-05-30T12:34:32,697][DEBUG][o.e.a.s.TransportSearchAction] [index-dev1] [arrets27][4], node[rpBSnTFORcmlVzldTfAGYA], [P], s[STARTED], a[id=6P0qTS-CTxC-TYA5mQ041w]: Failed to execute [SearchRequest{searchType=QUERY_THEN_FETCH, indices=[arrets27], indicesOptions=IndicesOptions[id=38, ignore_unavailable=false, allow_no_indices=true, expand_wildcards_open=true, expand_wildcards_closed=false, allow_alisases_to_multiple_indices=true, forbid_closed_indices=true], types=[arret], routing='null', preference='null', requestCache=false, scroll=null, source={ 
    "suggest" : { 
    "text" : "secs, Bovero,", 
    "simple_phrase" : { 
     "phrase" : { 
     "field" : "contenu_html.trigram", 
     "size" : 1, 
     "real_word_error_likelihood" : 0.95, 
     "confidence" : 2.5, 
     "separator" : " ", 
     "max_errors" : 2.0, 
     "gram_size" : 3, 
     "force_unigrams" : true, 
     "token_limit" : 10, 
     "direct_generator" : [ 
      { 
      "field" : "contenu_html.trigram", 
      "suggest_mode" : "always" 
      }, 
      { 
      "field" : "contenu_html.reverse", 
      "pre_filter" : "reverse", 
      "post_filter" : "reverse", 
      "suggest_mode" : "always" 
      }, 
      { 
      "field" : "contenu_html.nostem_with_accents", 
      "suggest_mode" : "missing" 
      } 
     ], 
     "collate" : { 
      "query" : { 
      "inline" : "{\"bool\":{\"must\":[{\"multi_match\":{\"query\":\"{{suggestion}}\",\"analyzer\":\"query_analyzer\",\"type\":\"cross_fields\",\"fields\":[\"doc_id^2\",\"search_title^0.1\",\"formation^2\",\"form_dec_att^1\",\"president^1\",\"avocat_gl^1\",\"avocats^1\",\"rapporteur^1\",\"commissaire_gvt^1\",\"citation_jp^0.05\",\"keywords^2\",\"liens^2\",\"numero^4\",\"numero_affaire^4\",\"other_numbers^4\",\"solution^2\",\"nature^2\",\"ville^2\",\"siege_appel^2\",\"juri_prem^2\",\"lieu_prem^2\",\"ecli^2\",\"reference_url^2\",\"wikipedia^100\",\"ancien_id^2\",\"type_rec^2\",\"nor^2\",\"nature_qualifiee^2\",\"loi_def^2\",\"titre_jo^2\",\"loi_def_nor^2\",\"loi_def_num^2\",\"saisines^2\",\"observations^2\",\"publi_bull_ref^4\",\"ref_numeros_affaires^2\",\"organisations^2\",\"issue^2\",\"resolution_number^2\",\"doctype_branch^2\",\"legifrance_ref^2\",\"reference_citation^2\",\"inpi_ref^2\",\"inpi_partan^0.1\",\"inpi_marq^0.1\",\"inpi_prod^2\",\"inpi_ti^2\",\"inpi_obj^2\",\"inpi_cib^2\",\"inpi_ct^2\",\"demandeurs_names^0.1\",\"defendeurs_names^0.1\",\"comment_titles^1\",\"citation_titles^0.1\",\"contenu_html^1\",\"saisines_html^2\",\"observations_html^2\",\"sommaire_ana^2\",\"comment_contents^0.5\",\"citation_contents^0.05\"],\"operator\":\"and\"}}],\"filter\":{{#toJson}}filters{{/toJson}}}}", 
      "lang" : "mustache", 
      "params" : { 
       "filters" : [ 
       { 
        "bool" : { 
        "should" : [ 
         { 
         "term" : { 
          "juridiction.raw" : "CE" 
         } 
         } 
        ] 
        } 
       }, 
       { 
        "bool" : { 
        "should" : [ 
         { 
         "term" : { 
          "search_access.raw" : "ALL" 
         } 
         }, 
         { 
         "term" : { 
          "search_access.raw" : "FREE_TRIAL" 
         } 
         }, 
         { 
         "term" : { 
          "search_access.raw" : "RESTRICTED" 
         } 
         } 
        ] 
        } 
       } 
       ] 
      } 
      }, 
      "prune" : true 
     } 
     } 
    } 
    } 
}}] 
org.elasticsearch.transport.RemoteTransportException: [index-dev1][172.31.26.119:9300][indices:data/read/search[phase/query]] 
Caused by: org.elasticsearch.ElasticsearchException: I/O exception during suggest phase 
    at org.elasticsearch.search.suggest.SuggestPhase.execute(SuggestPhase.java:72) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:94) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.SearchService.loadOrExecuteQueryPhase(SearchService.java:246) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:260) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.action.search.SearchTransportService$6.messageReceived(SearchTransportService.java:298) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.action.search.SearchTransportService$6.messageReceived(SearchTransportService.java:295) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:610) [elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:596) [elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) [elasticsearch-5.2.0.jar:5.2.0] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_121] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_121] 
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_121] 
Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('}' (code 125)): expected a value 
at [Source: org.elasticsear[email protected]8a49262; line: 1, column: 1111] 
    at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1702) ~[jackson-core-2.8.6.jar:2.8.6] 
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:558) ~[jackson-core-2.8.6.jar:2.8.6] 
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:456) ~[jackson-core-2.8.6.jar:2.8.6] 
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2656) ~[jackson-core-2.8.6.jar:2.8.6] 
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:832) ~[jackson-core-2.8.6.jar:2.8.6] 
    at org.elasticsearch.common.xcontent.json.JsonXContentParser.nextToken(JsonXContentParser.java:55) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.index.query.BoolQueryBuilder.fromXContent(BoolQueryBuilder.java:327) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.SearchModule.lambda$registerQuery$8(SearchModule.java:789) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.common.xcontent.NamedXContentRegistry.parseNamedObject(NamedXContentRegistry.java:162) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.common.xcontent.support.AbstractXContentParser.namedObject(AbstractXContentParser.java:369) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.index.query.QueryParseContext.parseInnerQueryBuilder(QueryParseContext.java:116) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.suggest.phrase.PhraseSuggester.innerExecute(PhraseSuggester.java:127) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.suggest.phrase.PhraseSuggester.innerExecute(PhraseSuggester.java:58) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.suggest.Suggester.execute(Suggester.java:46) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.suggest.SuggestPhase.execute(SuggestPhase.java:64) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:94) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.SearchService.loadOrExecuteQueryPhase(SearchService.java:246) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:260) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.action.search.SearchTransportService$6.messageReceived(SearchTransportService.java:298) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.action.search.SearchTransportService$6.messageReceived(SearchTransportService.java:295) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:69) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.transport.TransportService$7.doRun(TransportService.java:610) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:596) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-5.2.0.jar:5.2.0] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_121] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_121] 
    at java.lang.Thread.run(Thread.java:745) ~[?:1.8.0_121] 

Avez-vous une idée pourquoi je reçois cette erreur?

Répondre

1

Votre modèle Mustache est incorrect, si vous vérifiez votre modèle il est écrit comme ,\"filter\":{{#toJson}}filters{{/toJson}}}} à la fin.

toJson n'est pas la fonctionnalité standard Mustache. Il a été ajouté seulement dans Elasticsearch version 5.0.0 avec ce commit, qui a ajouté l'analyse de Map comme objet JSON pas comme une chaîne. Cette validation active uniquement cette analyse au point de terminaison _search/template.

Comme vous pouvez voir Template Query qui est utilisé par Phrase Suggester est déconseillé dans la version 5.0.0 et il est conseillé d'utiliser Search Template API.

+0

Avez-vous une idée de mettre en œuvre une chose similaire dans ma suggestion de suggestion? – Hugo

+0

Désolé @Hugo, je n'ai actuellement aucune suggestion à ce sujet. –