Elasticsearch のネストされたクエリに問題があります。インデックスに対してフィルター処理されたクエリを実行するために、Java API を介して複雑なネストされたクエリを作成しています。Elasticsearch から返された結果は、1 つの一致 ([total:1, take:79ms]) があることを示していますが、これは応答の一部として「ヒット」を返していません。
def response = client.search(request).actionGet()
def searchHits = response.hits() // <--- this is empty
result.total = searchHits.totalHits() // <--- this is populated with one
result.took = response.getTook()
curl または REST クライアントを介してまったく同じクエリを実行すると、一致するドキュメント全体が正しく返されます。そのため、両方の状況でクエリが正しく構築されていることがわかります。
size パラメータと from パラメータはどちらもデフォルトに設定されており、ドキュメントが返されます。
ネストされたクエリをフィルター セクションに移動すると、同じ一致するドキュメントが取得されますが、hits() オブジェクトが読み込まれます。
クエリ自体は以下です
{
"filtered" : {
"query" : {
"bool" : {
"must" : [ {
"nested" : {
"query" : {
"bool" : {
"must_not" : {
"bool" : {
"must" : [ {
"range" : {
"nested.from" : {
"from" : "2013-06-01T23:00:14.343Z",
"to" : "2013-06-02T23:00:14.343Z",
"include_lower" : true,
"include_upper" : true
}
}
}, {
"term" : {
"nested.status" : "accepted"
}
} ]
}
},
"should" : [ {
"bool" : {
"must" : [ {
"range" : {
"nested.from" : {
"from" : "2013-06-01T23:00:14.343Z",
"to" : "2013-06-02T23:00:14.343Z",
"include_lower" : true,
"include_upper" : true
}
}
}, {
"term" : {
"nested.status" : "saved"
}
} ]
}
} ]
}
},
"path" : "nested"
}
} ]
}
} ]
}
},
"filter" : {
"and" : {
"filters" : [ {
"type" : {
"value" : "user"
}
}]
}
}
}
}