如何返回字段中所有值的列表

时间:2018-06-22 13:39:44

标签: c# search solr solrnet

我有一个类似的文件:

{
"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?

3 个答案:

答案 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();
}

这是我当前的解决方案。它有效,但我希望会有更好的方法。我正在搜索结果以获取所有类别。