2013-07-27 39 views
0

我第一次使用Solr和Solrnet。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還不是很滿意。

任何幫助將不勝感激。

在此先感謝 鋁

回答

0

您可以俱樂部查詢,並添加作爲面查詢Opertations

ISolrQueryResults<TestDocument> r = solr.Query("product_id:XXXXX", new QueryOptions { 
    FacetQueries = new ISolrFacetQuery[] { 
     new SolrFacetFieldQuery("category") 
    } 
}); 
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, 
});