Solr和facet搜索

时间:2010-03-01 17:08:45

标签: solr facet

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

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

然后你只需使用fq查询语法,它会返回facet xml以及搜索结果吗?

是否有一篇很好的文章可以帮助你第一次参与?

5 个答案:

答案 0 :(得分:19)

是的,您可以开箱即用任何索引字段。但是,在您configure faceting fields according to your data types之前,它可能无法为您提供所期望的结果。

通过facet.* parameters启用并使用分面,而不是fq。当用户选择一个方面值时,将使用fq。

一些很好的Solr教程:

答案 1 :(得分:10)

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

即可

这是另一个教程:Faceting

答案 2 :(得分:2)

使用SolrNet软件包在C#中使用以下代码。 您可以在存储在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);

答案 3 :(得分:0)

来自Apache solr参考指南的

Faceting

答案 4 :(得分:0)

C#中的Nuget软件包中的

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);
        }
    }