Solr と Solrnet を初めて使用しています。
次のフィールドを含むスキーマを作成できました。
created_date DateTime
parent_id int
categories string multi-valued
parent_id
次のように、フィールドに対して基本的な検索を行うことができました。
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<SolrNode>>();
ICollection<SolrNode> results = solr.Query(new SolrQueryByField("parent_id", currentNode.Id.ToString()));
すべての結果に対してファセットを返す方法を(一種の)理解することができました。
var solrFacet = ServiceLocator.Current.GetInstance<ISolrOperations<SolrNode>>();
var r = solrFacet.Query(SolrQuery.All, new QueryOptions
{
Rows = 0,
Facet = new FacetParameters
{
Queries = new[] {
//new SolrFacetDateQuery("created_date", DateTime.Now /* range start */, DateTime.Now.AddMonths(-6) /* range end */, "+1DAY" /* gap */) {
// HardEnd = true,
// Other = new[] {FacetDateOther.After, FacetDateOther.Before}
//}
new SolrFacetDateQuery("created_date", new DateTime(2011, 1, 1).AddDays(-1) /* range start */, new DateTime(2014, 1, 1).AddMonths(1) /* range end */, "+1MONTH" /* gap */) {
HardEnd = true,
Other = new[] {FacetDateOther.After, FacetDateOther.Before}
}
//,
//new SolrFacetFieldQuery("categories")
},
}
});
//foreach (var facet in r.FacetFields["categories"])
//{
// this.DebugLiteral.Text += string.Format("{0}: {1}{2}", facet.Key, facet.Value, "<br />");
//}
DateFacetingResult dateFacetResult = r.FacetDates["created_date"];
foreach (KeyValuePair<DateTime, int> dr in dateFacetResult.DateResults)
{
this.DebugLiteral.Text += string.Format("{0}: {1}{2}", dr.Key, dr.Value, "<br />");
}
しかし、私が理解できないのは、それをすべて一緒に配管する方法です。私の要件は次のとおりです。
ページの読み込み - parent_id が N に一致するすべての検索結果を表示します。検索結果のファセットをクエリし、次のようにファセットのチェック ボックスを表示します。
カテゴリー
- カテゴリー1
- カテゴリー2
内部
- 先週
- 先月
- 過去 3 か月
- 過去 6 か月
- いつも
ユーザーが関連するチェック ボックスをクリックすると、コードが別の solr クエリを実行し、ユーザーが選択したファセットと共に、parent_id 基準の両方を渡します。
私の説明では、プロセスを単純化したことに気付きました。おそらく、StackOverflow で尋ねるのは非常に大きな質問なので、もちろん実際の例は期待していません (ただし、退屈している場合はお気軽に ;-)) が、誰かがポインタや例を提供できますか? SolrNet には MVC サンプル アプリがありますが、私は WebForms を使用しており、MVC にはまだあまり慣れていません。
どんな助けでも大歓迎です。
前もってありがとうアル