0

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"
      }
    }]
      }
    }
  }
}
4

1 に答える 1

0

修正済み - Elasticsearch の新しいバージョンにアップグレードされました。

バージョン 0.20.x 以下では、Java API を使用して作成されたネストされたクエリが気に入らないようです。

于 2013-06-02T20:16:13.070 に答える