我有一个类似的文件:
{
"Id":"1",
"Name":"product1",
"Categories":["Cat1",
"Cat2",
"Cat3"]
},
{
"Id":"2",
"Name":"product2",
"Categories":["Cat3",
"Cat2",
"Cat6"]
}
现在,我想返回所有类别的不同列表。 我尝试了CollapseParameter,但是它不起作用。
var foo = _solr.Query(new SolrQuery("*"), new QueryOptions
{
Collapse = new CollapseParameters("Categories")
});
var bar= results.CollapseExpand; //NULL
如何在不遍历所有文档的情况下获得所有类别的列表?我必须为类别创建新的文档吗?还是应该使用Faceting?
答案 0 :(得分:0)
看起来JSON无效。因此,我创建了一个更改Json的解决方案:
{
"items": [{
"Id": "1",
"Name": "product1",
"Categories": ["Cat1", "Cat2", "Cat3"]
}, {
"Id": "2",
"Name": "product2",
"Categories": ["Cat3", "Cat2", "Cat6"]
}]
}
然后,我使用了foreach和LINQ结构:
var x = categories.SelectMany(item => item.Categories).Distinct();
答案 1 :(得分:0)
如果您使用的是solr,并且想为特定字段提供所有不同的值,那么必须开始阅读solr faceting doc,这非常了不起。
仅在您的查询中添加以下查询,您会获得所有不同类别的完整列表。
&facet=true&facet.field=Categories
就是这样,它将提供您期望的结果集。
答案 2 :(得分:0)
QueryOptions options = new QueryOptions
{
StartOrCursor = new StartOrCursor.Start(0),
Rows = 1,
Facet = new FacetParameters { Queries = new[] { new SolrFacetFieldQuery("Categories") } }
};
var result = _solrConnection.Query(new SolrQuery("*"), options);
if (result.FacetFields.ContainsKey("Categories"))
{
return result.FacetFields["Categories"]
.Where(li => li.Value > 0)
.Select(y=> y.Key)
.ToList();
}
这是我当前的解决方案。它有效,但我希望会有更好的方法。我正在搜索结果以获取所有类别。