【问题标题】:How to return Search Result Score using Solrnet如何使用 Solrnet 返回搜索结果分数
【发布时间】:2013-05-04 10:07:40
【问题描述】:

我们正在使用 SolrNet API 来索引和搜索一组文档。对应的代表 Solr 文档的 POCO 是

internal class IndexDocument
{
    [SolrField("DocId")]
    public long DocId { get; set; }

    [SolrField("DocTitle")]
    public string DocTitle { get; set; }

    [SolrField("Content")]
    public string Content { get; set; }
}

我们可以索引数据并成功返回搜索结果。要求是返回结果项的相关性分数以及 solr 文档属性。我们可以通过将“score”作为搜索请求中的字段添加到 solr 来返回分数数据。但问题是我们如何接受 solr 结果中的分数数据,因为这不是 solr 文档类的一部分。我们使用下面的sn-p来执行搜索:

SolrQueryResults<IndexDocument> results = SolrInstance.Query(query, options);

当我们从 solr 管理界面执行查询时,我们可以获得返回的分数数据,但是我们如何在结果对象中返回分数数据,因为搜索结果仅根据 IndexDocument 类返回。 SolrQueryResults 类的其他参数,如 Grouping、Higlights、SimilarResults、Terms 等,通常与 Solr 文档类无关,也不适合返回分数数据。

【问题讨论】:

标签: solr solrnet


【解决方案1】:

Maurizio 和 HungryPipo 的回答给了我一些提示,但这里是对我有用的代码(在 sitecore 项目中):

[IndexField("score")]
public decimal Score { get; set; }

另外,我必须将其添加到查询选项中:

Fields = {"*", "score"}

【讨论】:

    【解决方案2】:

    您可以通过两个 POCO 类来完成此操作。 一种用于映射检索到的结果,另一种用于索引。 确保以这种方式添加分数字段:

    [SolrField("score")]
    public double Score { get; set; }
    

    仅在用于检索数据的第一个类中。

    【讨论】:

      【解决方案3】:

      如果你让你的 POCO 类的分数可以为空,你可以使用相同的对象来建立索引和结果

      [SolrField("score")]
      public double? Score { get; set; }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多