0

Elasticsearch インデックス内の多値配列へのアクセスに問題があります。elasticsearch から多値配列を取得する際にクエリを使用しますが、 検索用に指定された配列が存在するインデックス内の一部のドキュメントで null poiter 例外が発生しました match_all の代わりに queryString クエリ

{
took: 3
timed_out: false
_shards: {
    total: 2
    successful: 1
    failed: 1
    failures: [
        {
            status: 500
            reason: NullPointerException[null]
        }
    ]
}

私のクエリは

{
 "query":{
  "query_string":{
  "query":"report","default_field":"Content"
 }
},
"script_fields": {
"entity_facets": {
"script": "result=[];foreach(facet : _source.Categories.Types.Events)      

{if(facet.event==event) result.add(facet);} result",
 "params": {
 "event":"AnalystEvent"
  }
  }
 }

}

編集: クエリを実行して取得し たインデックス https://gist.github.com/4129488があります

 {
  "from": "0",
  "size": "100",
  "query": {
   "bool": {
   "must": [
   {
    "bool": {
    "must": [
    {
     "query_string": {
     "query": "confronted",
     "default_field":"Content"
    }
   },
   {
    "range": {
    "actualTimeStamp": {
    "from": "23-07-2012 10:04:52",
    "to": "23-09-2012 10:04:52"
   }
 }
 }
  ]
 }
 },
 {
  "bool": {
  "should": [
  {
    "fuzzy": {
    "SourceName": {
     "value": "Economic_Times"
   }
   }
   },
   {
     "fuzzy": {
     "SourceName": {
     "value": "reuters"
    }
   }
  }
 ]
 }
}
]
}
}
}

しかし、上記のクエリでスクリプトフィールドを使用すると、このインデックスを取得できませんでした!!

4

1 に答える 1

0

おそらく、_source を保存しないレコードがあるか、その _source にカテゴリがないか、カテゴリにタイプがないか、タイプにイベントがありません。これらの条件を確認するには、if ステートメントを追加するだけです。

于 2012-11-20T14:52:46.160 に答える