SolrNet面向搜索
本文关键字:搜索 SolrNet | 更新日期: 2023-09-27 18:25:07
我是第一次使用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()));
我已经能够找到(某种程度上)如何返回所有结果的facet,如下所示:
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标准以及用户选择的facet。
我意识到在我的描述中,我简化了流程,也许这是一个关于StackOverflow的大问题,所以我当然不期待有一个工作示例(尽管如果你觉得无聊,请随意;-)),但有人能提供任何指针或示例吗?SolrNet确实有一个MVC示例应用程序,但我使用的是WebForms,对MVC还不是很熟悉。
如有任何帮助,我们将不胜感激。
提前感谢Al
您可以加入查询并添加facets作为查询操作
ISolrQueryResults<TestDocument> r = solr.Query("product_id:XXXXX", new QueryOptions {
FacetQueries = new ISolrFacetQuery[] {
new SolrFacetFieldQuery("category")
}
});
我创建一个选定facet的'fq'字符串。例如,如果用户选择以下方面:
united states
california
almond growers
并且facet字段为"content_type",我生成以下查询字符串:
(content_type:"united states" AND content_type:california AND content_type:"almond growers")
注意引号和左右括号。。。重要的我将其存储在名为finalFacet的变量中。然后,我像这样将其提交给Solr,其中sQuery是用户正在搜索的文本,finalFacet是facet查询字符串,如上所示:
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,
});