12

设置架构时是否内置了构面搜索,或者您是否必须做一些事情来设置它?

它基本上可以在您设置为可排序的所有字段上开箱即用吗?

那么您只需使用 fq 查询语法,它就会返回 facet xml 以及搜索结果?

有没有一篇很好的文章第一次帮助你?

4

5 回答 5

19

是的,您可以开箱即用地分面任何索引字段。但是,在您根据数据类型配置分面字段之前,它可能不会给您预期的结果。

分面是通过facet.* 参数启用和使用的,而不是 fq。fq 在用户选择分面值时使用。

一些不错的 Solr 教程:

于 2010-03-01T17:19:34.480 回答
10

是的,只需添加&facet=true&facet.field={fieldname}到您的请求 URL。

这是另一个教程:Faceting

于 2011-07-26T19:08:20.003 回答
2

下面的 C# 代码,使用 SolrNet 包。您可以在 SOLR 中存储的字段上执行 Facet,确保其字符串没有空间以获得更好的结果。mincount 用于限制在 facet 中列出的最小数量。

        QueryOptions options = new QueryOptions
        {                
            Facet = new FacetParameters
            {
                Queries = new ISolrFacetQuery[]
                {
                    new SolrFacetFieldQuery("field1"),
                    new SolrFacetFieldQuery("field2")
                },
                MinCount = 20
            }
        };

下面的代码得到结果,查询 - 是在前端输入的搜索。

    var result = solr.Query(query, options);
于 2017-01-18T19:17:40.993 回答
0

来自 Apache solr 参考指南的构面。

于 2016-06-28T07:48:11.430 回答
0

来自 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);
        }
    }
于 2019-10-08T08:17:55.440 回答