0

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 にはまだあまり慣れていません。

どんな助けでも大歓迎です。

前もってありがとうアル

4

2 に答える 2

0

クエリをクラブ化し、ファセットをクエリ操作として追加できます

ISolrQueryResults<TestDocument> r = solr.Query("product_id:XXXXX", new QueryOptions {
    FacetQueries = new ISolrFacetQuery[] {
        new SolrFacetFieldQuery("category")
    }
});
于 2013-07-29T06:41:58.613 に答える
0

選択したファセットの「fq」文字列を作成します。たとえば、ユーザーがこれらのファセットを選択した場合:

 united states

 california

 almond growers

ファセット フィールドが「content_type」の場合、次のクエリ文字列を生成します。

(content_type:"united states" AND content_type:california  AND content_type:"almond growers")

引用符と開き括弧と閉じ括弧に注意してください...重要です! これを finalFacet という名前の変数に格納します。次に、このように Solr に送信します。ここで、sQuery はユーザーが検索しているテキストであり、finalFacet は上記のようにファセット クエリ文字列です。

articles = solr.Query(sQuery, new QueryOptions
{
   ExtraParams = new Dictionary<string, string> {
   {"fq", finalFacet},
},
Facet = new FacetParameters
{
   Queries = new[] { new SolrFacetFieldQuery("content_type")}
},
Rows = 10
Start = 1,
});
于 2015-05-16T14:49:04.260 に答える