2014-05-21 3 views
0

자동 생성 된 elasticSearch 쿼리에 문제가 있습니다. 나는이 엔드 포인트를 설명 할 것을 고려에서 오는 알아낼 수있는 방법ElasticSearch 부울 쿼리 디버깅

index: "shard" 
reason: "ClassCastException[ 
    org.elasticsearch.common.mvel2.compiler.BlankLiteral cannot be cast to java.lang.Boolean]" 
shard: 1 
status: 500 
successful: 6 
total: 7 

: 그것을 실행할 때, 나는 인덱스에 사용하고 일곱 개 파편의 여섯 일곱 번째 반환이 오류가 성공을 반환하고, 루트 쿼리가 bool 일 때 절대적으로 아무 것도 나오지 않습니까? 다음과 같이

쿼리는 다음과 같습니다

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "filtered": { 
      "query": { 
       "range": { 
       "date": { 
        "lte": "2014-05-21T21:59:59+00:00", 
        "gte": "2013-01-23T23:00:00+00:00" 
       } 
       } 
      }, 
      "filter": { 
       "not": { 
       "terms": { 
        "idCountry": [ 
        "9999" 
        ] 
       } 
       } 
      } 
      } 
     }, 
     { 
      "filtered": { 
      "query": { 
       "nested": { 
       "path": "reports", 
       "query": { 
        "terms": { 
        "reports.36317.flag": [ 
         "o" 
        ], 
        "minimum_should_match": 1 
        } 
       } 
       } 
      }, 
      "filter": { 
       "nested": { 
       "path": "reports", 
       "filter": { 
        "exists": { 
        "field": "reports.36317" 
        } 
       } 
       } 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "script_fields": { 
    "idTone": { 
     "script": "_source.reports[reportId].empty || _source.reports[reportId].idTone.empty ? _source.idLanguage : _source.reports[reportId].idTone", 
     "params": { 
     "reportId": "36317" 
     } 
    }, 
    "tags": { 
     "script": "_source.reports[reportId].empty || _source.reports[reportId].tags.empty ? 'none' : _source.reports[reportId].tags", 
     "params": { 
     "reportId": "36317" 
     } 
    }, 
    "flag": { 
     "script": "_source.reports[reportId].empty || _source.reports[reportId].flag.empty ? 'O' : _source.reports[reportId].flag", 
     "params": { 
     "reportId": "36317" 
     } 
    }, 
    "synthesioRank": { 
     "script": "_source.reports[reportId].empty || _source.reports[reportId].synthesioRank.empty || _source.reports[reportId].synthesioRank == null ? '0' : _source.reports[reportId].synthesioRank", 
     "params": { 
     "reportId": "36317" 
     } 
    }, 
    "idUserEngagement": { 
     "script": "_source.reports[reportId].empty || _source.reports[reportId].idUserEngagement == null ? '0' : _source.reports[reportId].idUserEngagement", 
     "params": { 
     "reportId": "36317" 
     } 
    }, 
    "idStatus": { 
     "script": "_source.reports[reportId].empty || _source.reports[reportId].idStatus == null ? '0' : _source.reports[reportId].idStatus", 
     "params": { 
     "reportId": "36317" 
     } 
    } 
    }, 
    "fields": [ 
    "access", 
    "content", 
    "title", 
    "date", 
    "geo", 
    "idItem", 
    "idSiteType", 
    "idSite", 
    "idSource", 
    "idSourceType", 
    "idTopic", 
    "media", 
    "url", 
    "idLanguage", 
    "idDocument", 
    "idCountry" 
    ] 
} 

답변

1

던져진 예외는 MVEL, 귀하의 경우에 script_fields에 사용되는 스크립트 언어와 관련이있다.

샤드가 1 개만 실패한다는 것은 어쩌면 해당 샤드의 특정 문서에 대해 스크립트 필드 중 하나의 실행이 실패 함을 의미 할 수 있습니다.

필드를 요청하는 모든 필터와 함께 해당 필드를 하나씩 시도하여 제거 할 수 있습니다.

참고 : Explain API는 정렬 된 쿼리에서 스코어 계산을 이해하는 데 도움이되도록 설계되었습니다. 실패한 쿼리와 관련하여 어떤 식 으로든 도움이되지는 않습니다.

+0

힌트 감사합니다! 나는 네가 말한 것과 똑같이 할 것이며 진행 상황을 계속 알려줄 것이다. –