1

_search と _count では、クエリの形式が異なるようです。たとえば、これは私の_searchクエリです:

{
  query: {
    filtered: {
      query: { match: { Name: "bob" } },
      filter: { term: { GroupIds: 3 } }
    }
  }
}

しかし、_countそれを理解するには、外側を削除する必要がありますquery:

{
  filtered: {
    query: { match: { Name: "bob" } },
    filter: { term: { GroupIds: 3 } }
  }
}

それは では動作しません_search。さらに混乱させるために、の両方が削除され_searchた場合はそれを受け入れます:query filtered

{
  query: { match: { Name: "bob" } },
  filter: { term: { GroupIds: 3 } }
}

_searchでは、 vs .を使用する場合のクエリ DSL の実際のルールは何_countでしょうか?

4

1 に答える 1

4

検索は、elasticsearch で最も複雑な操作の 1 つであり、その結果、トップ レベルqueryfilterfacets、などのさまざまなパラメーターを受け入れますsize

パラメータには、queryクエリ DSL で定義されているクエリが含まれている必要があります。match_allまたはを含む任意のクエリを指定できますfiltered。たとえば、すべてのレコードを受け入れて上位 20 件を返す検索リクエストは次のようになります。

{
    "query": {
        "match_all": {}
    },
    "size": 20
}

検索リクエストのfilterパラメーターはフィルターを受け入れることができます (これもクエリ DSL で定義されています)。このフィルターには、検索での特別な機能があります。リクエストのファセットには影響しません。filterそのため、通常、検索結果をフィルタリングしたいがファセットに影響を与えたくない場合は、ファセット検索でのみパラメーターを使用するのが理にかなっています。他のすべての場合では、filteredクエリは通常、より高速な結果を生成します。

そういえば、クエリはクエリなので、検索リクエストfilteredのパラメータで使えます。queryこれも複合クエリです。パラメーターに別のクエリを受け入れ、queryパラメーターにフィルターを受け入れfilter、クエリとそれを構成するフィルターの両方を満たすドキュメントのみを返す複合クエリを生成します。つまり、クエリのfilterパラメーターはfiltered検索結果とファセットの両方に影響しfilterますが、クエリのパラメーターはsearch検索結果のみに影響し、ファセットには影響しません。

そして最後にcountお願いです。リクエストはcountリクエストよりもはるかに単純ですsearch。ファセットでは機能せず、常に完全なカウントを要求するため、サイズ パラメーターはあまり意味がありません。そのため、count要求が期待するのは最上位レベルの 1 つのクエリだけです。たとえば、すべてのドキュメントをカウントするには、countリクエストに次のようなものが含まれます。

{
    "match_all": {}
}
于 2013-01-24T02:16:25.653 に答える