2016-04-26 11 views
0

elasticsearchスクリプトベースのソートの動作を理解するには、あなたの助けが必要です。スクリプトを使用したElasticsearch multitypesクエリの不具合の修正

まず第一に、私は私のelasticsearchタイプのマッピングを貼り付けてみましょう:

{ 
"nestedDateType" : { 
     "properties" : { 
      "message" : { 
      "properties" : { 
       "date" : { 
       "type" : "date", 
       "format" : "dateOptionalTime" 
       } 
      } 
     } 
     } 
    }, 
    "nonNestedDateType" : { 
     "properties" : { 
      "date" : { 
      "type" : "date", 
      "format" : "dateOptionalTime" 
      } 
     } 
    } 
} 

は今、私が何をしたいのか、これらの2種類を照会することで、ソート日付に基づい。 問題はnestedDateTypeにあり、日付パスは "message.date"で、nonNestedDateTypeの場合、日付パスは "date"です。

私はこれを行うためにスクリプトベースのソートを使用しなければならないことを理解します。しかし、私が作ったスクリプトは期待通りに動かなかった。 =あなたがタイプnestedDateTypeの最後の結果から見ることができるように、私はソートを期待していた

{ 
    "took": 60, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 15, 
    "max_score": null, 
    "hits": [ 
     { 
     "_index": "***", 
     "_type": "nonNestedDateType", 
     "_id": "***", 
     "_score": null, 
     "_source": { 
      "docId": "***", 
      "date": 1461634484557 
     }, 
     "sort": [ 
      1461634484557 
     ] 
     }, 
     { 
     "_index": "***", 
     "_type": "nonNestedDateType", 
     "_id": "***", 
     "_score": null, 
     "_source": { 
      "docId": "***", 
      "date": 1461634483528 
     }, 
     "sort": [ 
      1461634483528 
     ] 
     }, 
     { 
     "_index": "***", 
     "_type": "nestedDateType", 
     "_id": "***", 
     "_score": null, 
     "_source": { 
      "docId": "***", 
      "message": { 
      "date": 1461548078310 
      } 
     }, 
     "sort": [ 
      0 
     ] 
     } 
    ] 
    } 
} 

POST http://locahost:9200/index/nonNestedDateType,nestedDateType/_search?size=5000 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "or": [ 
       { 
        "range": { 
        "date": { 
         "gte": "2015-04-01" 
        } 
        } 
       }, 
       { 
        "range": { 
        "message.date": { 
         "gte": "2015-04-01" 
        } 
        } 
       } 
       ] 
      } 
      ] 
     } 
     } 
    } 
    }, 
    "sort": { 
    "_script": { 
     "script": "doc.containsKey('message') ? doc.message.date.value : doc.date.value", 
     "type": "number", 
     "order": "desc" 
    } 
    } 
} 

を、これらは私が得た結果である:これは私が試したクエリです誰も私が間違っていることを私に説明することはできませんでしたか?

は、一部のフィールドが機密性のために削除されていることに注意してください。

+0

を返すことはありません、なぜいえ

script": "doc.date.value == 0 ? doc['message.date'].value : doc.date.value" 

script": "doc.containsKey('message') ? doc.message.date.value : doc.date.value" 

を変更することで動作することができますランニング? – Val

+0

バージョン1.6.2を使用しています – Lee

答えて

0

私は最終的にそれはまだ好奇心doc.containsKey( 'メッセージ')はESのバージョンがあり、真

関連する問題