Solr and facet search

人走茶凉 提交于 2019-12-02 20:58:56

Yes, you can facet any indexed field out of the box. However it might not give you the results you expect until you configure faceting fields according to your data types.

Faceting is enabled and used through the facet.* parameters, not fq. fq is used when the user selects a facet value.

Some good Solr tutorials:

Yes, Simply add &facet=true&facet.field={fieldname} to your request Url.

Here is another tutorial:Faceting

The below code in C#, by using SolrNet package. The Facet you can do it on the fields stored in SOLR, make sure its string and doesn't have space for better results. The mincount is for limiting the minimum number to get listed in facet.

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

And the below code to get the results, query - is the search entered in front end.

    var result = solr.Query(query, options);

Faceting from Apache solr reference guide.

SolrNet package from Nuget Packages in C# provides a simple way of achieving this. The documentation helps. Here's an example,

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);
        }
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!