2016-06-29 11 views
1

ich eine Suchabfrage mit der folgenden Nutzlast gehabt haben: -inner_hit Definition mit dem Namen [TypeName] existiert bereits. Verwenden Sie einen anderen inner_hit Namen

"query": { 
    "filtered": { 
     "filter": { 
      "and": [ 
       { 
        "range": { 
         "@timestamp": { 
          "gte": "2015-01-01||/d", 
          "lte": "2016-01-01||/d" 
         } 
        } 
       }, 
       { 
        "or": [ 
         { 
          "has_child": { 
           "type": "TypeName", 
           "filter": { 
            "term": { 
             "eventType.raw": "some-event" 
            } 
           }, 
           "inner_hits": { 
            "_source": "@timestamp" 
           } 
          } 
         }, 
         { 
          "not": { 
           "has_child": { 
            "type": "TypeName", 
            "filter": { 
             "term": { 
              "eventType.raw": "some-event" 
             } 
            }, 
            "inner_hits": { 
             "_source": "@timestamp" 
            } 
           } 
          } 
         } 
        ] 
       } 
      ] 
     } 
    } 
} 

und dies funktionierte gut mit Elasticsearch 1.7 aber mit der letzten stabilen Version 2.3.3 von Elasticsearch tut es nicht ganz funktioniert und schlägt mit der folgenden Reaktion: -

 "reason": { 
      "type": "illegal_argument_exception", 
      "reason": "inner_hit definition with the name [TypeName] already exists. Use a different inner_hit name" 
     } 

die Protokolle zeigen den folgenden Stack-Trace: -

nested: IllegalArgumentException[inner_hit definition with the name [TypeName] already exists. Use a different inner_hit name]; 
    at org.elasticsearch.search.SearchService.parseSource(SearchService.java:855) 
    at org.elasticsearch.search.SearchService.createContext(SearchService.java:654) 
    at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:620) 
    at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:371) 
    at org.elasticsearch.search.action.SearchServiceTransportAction$SearchQueryTransportHandler.messageReceived(SearchServiceTransportAction.java:368) 
    at org.elasticsearch.search.action.SearchServiceTransportAction$SearchQueryTransportHandler.messageReceived(SearchServiceTransportAction.java:365) 
    at org.elasticsearch.transport.TransportRequestHandler.messageReceived(TransportRequestHandler.java:33) 
    at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:75) 
    at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:376) 
    at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) 
    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) 
Caused by: java.lang.IllegalArgumentException: inner_hit definition with the name [TypeName] already exists. Use a different inner_hit name 
    at org.elasticsearch.search.fetch.innerhits.InnerHitsContext.addInnerHitDefinition(InnerHitsContext.java:69) 
    at org.elasticsearch.index.query.QueryParseContext.addInnerHits(QueryParseContext.java:218) 
    at org.elasticsearch.index.query.HasChildQueryParser.parse(HasChildQueryParser.java:155) 
    at org.elasticsearch.index.query.QueryParseContext.parseInnerFilter(QueryParseContext.java:277) 
    at org.elasticsearch.index.query.NotQueryParser.parse(NotQueryParser.java:69) 
    at org.elasticsearch.index.query.QueryParseContext.parseInnerQuery(QueryParseContext.java:250) 
    at org.elasticsearch.index.query.QueryParseContext.parseInnerFilter(QueryParseContext.java:263) 
    at org.elasticsearch.index.query.OrQueryParser.parse(OrQueryParser.java:69) 
    at org.elasticsearch.index.query.QueryParseContext.parseInnerQuery(QueryParseContext.java:250) 
    at org.elasticsearch.index.query.QueryParseContext.parseInnerFilter(QueryParseContext.java:263) 
    at org.elasticsearch.index.query.AndQueryParser.parse(AndQueryParser.java:69) 
    at org.elasticsearch.index.query.QueryParseContext.parseInnerQuery(QueryParseContext.java:250) 
    at org.elasticsearch.index.query.QueryParseContext.parseInnerFilter(QueryParseContext.java:263) 
    at org.elasticsearch.index.query.FilteredQueryParser.parse(FilteredQueryParser.java:79) 
    at org.elasticsearch.index.query.QueryParseContext.parseInnerQuery(QueryParseContext.java:250) 
    at org.elasticsearch.index.query.IndexQueryParserService.innerParse(IndexQueryParserService.java:320) 
    at org.elasticsearch.index.query.IndexQueryParserService.parse(IndexQueryParserService.java:223) 
    at org.elasticsearch.index.query.IndexQueryParserService.parse(IndexQueryParserService.java:218) 
    at org.elasticsearch.search.query.QueryParseElement.parse(QueryParseElement.java:33) 
    at org.elasticsearch.search.SearchService.parseSource(SearchService.java:838) 
    ... 12 more 

Irgendeine Idee, was hier schief gehen könnte?

Antwort

1

Zitieren der Antwort von Martijn Van auf elasticsearch Gemeinschaft bei https://discuss.elastic.co/t/inner-hits-queries-break-from-1-7-to-2-3-in-elasticsearch/54242/4?u=siddharthgoel88.

Das Problem ist, dass Sie zwei innere Trefferdefinitionen in Ihrer Anfrage haben, die den gleichen Namen verwenden. Der Standardname basiert auf dem Typ innerhalb der Abfrage has_child. Sie können einen benutzerdefinierten Namen von angeben, indem Sie das Namensfeld innerhalb der inner_hits-Definition angeben. Der Name inner_hit ist hier wichtig, weil das in der Antwort auf identifiziert wird, zu welcher inner_hit Definition die inneren Treffer gehören.

sollte der folgende Aufruf arbeiten:

{ 
"query": { 
    "filtered": { 
     "filter": { 
      "and": [ 
       { 
        "range": { 
         "@timestamp": { 
          "gte": "2015-01-01||/d", 
          "lte": "2016-01-01||/d" 
         } 
        } 
       }, 
       { 
        "or": [ 
         { 
          "has_child": { 
           "type": "TypeName", 
           "filter": { 
            "term": { 
             "eventType.raw": "some-event" 
            } 
           }, 
           "inner_hits": { 
            "_source": "@timestamp", 
            "name" : "inner_hit1" 
           } 
          } 
         }, 
         { 
          "not": { 
           "has_child": { 
            "type": "TypeName", 
            "filter": { 
             "term": { 
              "eventType.raw": "some-event" 
             } 
            }, 
            "inner_hits": { 
             "_source": "@timestamp", 
             "name" : "inner_hit2" 
            } 
           } 
          } 
         } 
        ] 
       } 
      ] 
     } 
    } 
} 
} 
Verwandte Themen