【发布时间】:2011-01-22 09:21:16
【问题描述】:
在您设置架构时是否会内置分面搜索,或者您是否必须做一些事情来设置它?
它基本上在您设置为可排序的所有字段上都可以开箱即用吗?
那么您只需使用 fq 查询语法,它就会将 facet xml 与搜索结果一起返回?
有没有一篇很好的文章第一次帮助你?
【问题讨论】:
在您设置架构时是否会内置分面搜索,或者您是否必须做一些事情来设置它?
它基本上在您设置为可排序的所有字段上都可以开箱即用吗?
那么您只需使用 fq 查询语法,它就会将 facet xml 与搜索结果一起返回?
有没有一篇很好的文章第一次帮助你?
【问题讨论】:
是的,您可以开箱即用地设置任何索引字段。但是,在您 configure faceting fields according to your data types 之前,它可能不会给您预期的结果。
Faceting 是通过facet.* parameters 而不是 fq 启用和使用的。当用户选择一个构面值时使用 fq。
一些不错的 Solr 教程:
【讨论】:
是的,只需将&facet=true&facet.field={fieldname} 添加到您的请求网址即可。
这里是另一个教程:Faceting
【讨论】:
下面的 C# 代码,使用 SolrNet 包。 您可以在 SOLR 中存储的字段上执行 Facet,确保其字符串没有空间以获得更好的结果。 mincount 用于限制在 facet 中列出的最小数量。
QueryOptions options = new QueryOptions
{
Facet = new FacetParameters
{
Queries = new ISolrFacetQuery[]
{
new SolrFacetFieldQuery("field1"),
new SolrFacetFieldQuery("field2")
},
MinCount = 20
}
};
下面的代码得到结果,query - 是前端输入的搜索。
var result = solr.Query(query, options);
【讨论】:
Faceting 来自 Apache solr 参考指南。
【讨论】:
来自 Nuget Packages in C# 的 SolrNet 包提供了一种实现此目的的简单方法。文档有帮助。这是一个例子,
public async Task SolrFaceting()
{
Console.WriteLine("facets");
var facetQuery = await _solr.QueryAsync(SolrQuery.All, new QueryOptions
{
Rows = 0,
Facet = new FacetParameters
{
Queries = new[]
{
new SolrFacetFieldQuery("FieldName1"),
new SolrFacetFieldQuery("FieldName2"),
new SolrFacetFieldQuery("FieldName3"),
new SolrFacetFieldQuery("FieldName4"),
},
Limit = 10
}
});
foreach (var facet in facetQuery.FacetFields["FieldName1"]) {
Console.WriteLine("{0}: {1}", facet.Key, facet.Value);
}
foreach (var facet in facetQuery.FacetFields["FieldName2"]) {
Console.WriteLine("{0}: {1}", facet.Key, facet.Value);
}
foreach (var facet in facetQuery.FacetFields["FieldName3"]) {
Console.WriteLine("{0}: {1}", facet.Key, facet.Value);
}
foreach (var facet in facetQuery.FacetFields["FieldName4"]) {
Console.WriteLine("{0}: {1}", facet.Key, facet.Value);
}
}
【讨论】: