2

RavenDb でファセット検索を実行する方法があるかどうかを尋ねたいのですが、フィルターで除外されたファセットも取得します。

例:

CarプロパティColor : stringとを持つエンティティを作成しましょうStatus : enum(New,Used)

車を検索するときRedは、他のすべての色の数も取得したいと考えています。同様に、Used車を検索する場合は、新車の数も確認したいと考えています。

すべてのチェックを外した場合:

UI
Color:  [ ] Red (5)   [ ] Blue (7) [ ] White (15)
Status: [ ] Used (20) [ ] New (7)

C#
session.Query<Car, Cars_Index>().ToFacets("facets/Cars");

適切な結果が得られます。

Colorしかし、両方をフィルタリングするとStatus、非常に限られた結果しか得られません。

UI
Color:  [x] Red (3)
Status: [x] Used (3)

C#
session.Query<Car, Cars_Index>()
    .Where(a => a.Status == CarStatus.Used)
    .Where(a => a.Color == "Red")
    .ToFacets("facets/Cars");

Response (JSON):
{ "Color": [ { "Range": "Red", "Count": 3 } ], "Status" : [ { "Range": "Used", "Count": 3 } ] }

私が現在行っていることは、ファセットごとに個別のクエリを発行することです。

var colorFacet = session.Query<Car, Cars_Index>()
    .Where(a => a.Status == CarStatus.Used)
    .ToFacets("facets/Cars");


var statusFacet = session.Query<Car, Cars_Index>()
    .Where(a => a.Color == "Red")
    .ToFacets("facets/Cars");

私が達成したいこと:

UI
Color:  [x] Red (3)  [ ] Blue (4) [ ] White (12)
Status: [x] Used (3) [ ] New (7)

赤の中古車、青の中古車、白の中古車、ユーザーの赤の車、新しい赤の車の数を取得します。したがって、ユーザーは、チェックボックスをクリックすると何が起こるかを即座にフィードバックできます。

ファセットの数と多様性が増大するにつれて、これは管理不能になります。1回のリクエスト/クエリで実行できるように設定する方法はありますか。

ありがとう

4

1 に答える 1

2

これは、ファセットが RavenDB で機能する方法ではありません (または、一般的に言えば)。すべてのファセットの交差ではなく、現在のクエリに基づいてファセットを調べます。

于 2012-08-10T11:28:23.527 に答える