Solr 和构面搜索

Posted

技术标签:

【中文标题】Solr 和构面搜索【英文标题】:Solr and facet search 【发布时间】:2011-01-22 09:21:16 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

是的,您可以开箱即用地设置任何索引字段。但是,在您 configure faceting fields according to your data types 之前,它可能不会给您预期的结果。

Faceting 是通过facet.* parameters 而不是 fq 启用和使用的。当用户选择一个构面值时使用 fq。

一些不错的 Solr 教程:

http://lucene.apache.org/solr/tutorial.html http://www.lucidimagination.com/Community/Hear-from-the-Experts/Podcasts-and-Videos/Solr-Tutorial

【讨论】:

@Mauricio_Scheffer 你知道任何项目 - github 或 codeplex - 目前已经实施了多面搜索以进行基准测试 - solr 或 lucene - ! brgds。 @sebastian_h 提出这个问题的正确位置是lucene.apache.org/solr/discussion.html。但是您想准确地进行基准测试?影响 Solr/Lucene 性能的配置、查询和架构设计中有许多因素。 @Mauricio_Scheffer 感谢您的回复。我是这个领域的新手,因此我想知道是否有任何 C# 项目可以看到实现 solr 的方法。 brgds! @mauricio_scheffer 谢谢你的信息。与 solrnet 的出色合作。是否建议在 beta 中使用 solrnet 0.4 或使用 0.3 版? brgds! @sebastian_h 总是选择最新的,即使是测试版,它也是稳定的。【参考方案2】:

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

这里是另一个教程:Faceting

【讨论】:

找不到该 URL。您可以将其替换为 searchhub.org/2009/09/02/faceted-search-with-solr【参考方案3】:

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

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

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

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

【讨论】:

【参考方案4】:

Faceting 来自 Apache solr 参考指南。

【讨论】:

【参考方案5】:

来自 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);
        
    

【讨论】:

以上是关于Solr 和构面搜索的主要内容,如果未能解决你的问题,请参考以下文章

Solr 多字构面不显示

Rails 5搜索构面过滤器

如何在 Thinking Sphinx 中同时使用多值属性 (MVA) 和构面?

在solr 6.4.2中复制期间的Facet查询速度很慢

如何使用 Sunspot 设置具有多对多关系的构面搜索?

在函数-ggplot中将参数传递给构面网格