0

私はメーカーのコレクションを持っており、それぞれがいくつかの製品を製造しています。メーカーは文字列タグを持つことができ、メーカータグで製品を検索したいと思います(タグがメーカーから製品に継承されるように)。

TransformResultsこれを行う 1 つの方法は、各製品にメーカーのタグを追加するインデックスを作成することです。

from product in results
select new {
    ...,
    Tags = Database.Load("manufacturers/"+ product.ManufacturerId).Tags
}

しかし、私はそれを照会することができないようです:

this.Query<T>("TaggedProducts").Where(s => s.Tags.Any(tag => tag=="reliable"));

タグがインデックス化されていないためです。RavenDB Studio を使用しています。

これは地図です:

from product in docs.Products
select new {
    product.Id,
    product.ManufacturerId
}

フィールドを定義する必要があるかどうかは不明です。それを説明するドキュメントが見つかりませんでした。

これらはクラスです:

class Manufacturer
{
    public int Id {get; set;}
    public List<string> Tags {get; set;}
}

class Product
{
    public int ManufacturerId {get; set;}
    public int Id {get; set;}
}

可能であれば、Tags フィールドを Product クラスに追加しないようにしています。これは、タグをストーリーに設定できるという誤った印象を与えるためです。

4

1 に答える 1

1

Map に入れるものはインデックス付けされるものであり、TransformResults に入れるものは成功したクエリから返されるものです。したがって、タグをマップに追加しない限り、タグを照会することはできません。

あなたができることはLoadDocument、マップで使用することです。2.0で利用可能になったかなり新しい機能です。ドキュメントはこちら: http://ravendb.net/docs/2.0/client-api/querying/static-indexes/indexing-related-documents

これは、おそらくあなたの場合、マップがどのように見えるかです:

from product in docs.Products
select new {
    product.Id,
    product.ManufacturerId,
    Tags = LoadDocument("manufacturers/"+ product.ManufacturerId).Tags
}

使用している TransformResults は同じままである可​​能性があります。

ヒントは、管理スタジオを使用して、インデックスが作成されているものを確認することです。Indexes -> [your index] -> Query でこれを行うことができ、 Query OptionsドロップダウンからIndex entriesチェックボックスをオンにします。

于 2013-08-01T09:43:23.813 に答える