私はRavenDBを使用しており、ユーザーがデータベースにアイテムを入力して、テキストタグを関連付けることができるようにしています。アイテムのクラスは
public class TagItem
{
public string Id { get; set; }
public string UserId { get; set; }
public List<string> Tags { get; set;}
public DateTime DateCreated { get; set; }
}
}
私がやりたいのは、ドキュメントクエリから選択したアイテムの個々のタグのインスタンス数を取得することです。例えば
Bacon : 12
Fudge : 8
Marshmallow : 6
私は現在、アイテムを繰り返し処理し、各タグのカウントを増やすことでこれを行っていますが、結果を取得するための非常に洗練された方法ではないようです。これを達成するためのより良い方法について誰かが提案を持っているかどうか疑問に思いましたか?前もって感謝します。
-編集#1--
マット
ファセット検索の提案を実装しようとしましたが、userIDのサブセットを使用して選択を実行する方法がわからないようです。私は次のようにインデックスを作成しました
public class Tag_Facets : AbstractIndexCreationTask<UserModel>
{
public Tag_Facets()
{
Map = locations => from user in users
from tag in user.Tags
select new { Tag = tag.ToString().ToLower(), user.Id };
}
}
ファセットを実行する前にこの選択を絞り込むために使用したいUserIdのリストがありますが、コンパイルしようとしたメソッドはありません。Where句がこれに対してどのように見えるかについてのアイデアを私に提供できますか?
私のFacetSetupは次のとおりです
this.DocumentSession.Store(new FacetSetup { Id = "facets/TagFacets", Facets = new
List<Facet> { new Facet { Name = "Tag" } } });
私が構築しようとしているクエリは
var facetResults = this.DocumentSession.Query<LocationModel>("Tag/Facets")
.Where(x => x.Id.Contains(new List<string> { "1", "2", "3" }))
.ToFacets("facets/TagFacets");
含むはリストを受け入れないため、ビルドされません
私がこれをどのように達成するかについて、あなたが私を正しい方向に向けることができるかもしれないことを望んでいました。
また、ファセット検索にご協力いただきありがとうございます。RavenDBで実行する必要のある多くのクエリを実行するために私が探しているもののようです。乾杯!
-編集#2-
これは、私が望む結果を達成するために使用するSQL式です。
SELECT t.Tag, COUNT(*) FROM UserTags t WHERE t.UserID in ('1', '2', '3', '4', '5') GROUP BY t.Tag