【问题标题】:Using score field with SolrNet在 SolrNet 中使用 score 字段
【发布时间】:2012-05-08 14:05:14
【问题描述】:

我正在使用 SolrNet,但遇到一个问题,即 score 字段与在索引中添加或更新的文档发生冲突。

代表我的文档的类看起来像这样

class MyDoc
{
    [SolrUniqueKey("doc_id")]
    public string DocId { get; set; }

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

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

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

在向 Solr 发出的查询中,我在 fl 参数中添加了“分数”字段,并在此类上返回并正确设置了分数值。但是,在添加或更新文档时,我收到关于我的索引中不存在的分数字段的错误,它不存在,也不应该因为这是一个动态字段。

添加/更新的代码相当简单:

Startup.Container.GetInstance<ISolrOperations<MyDoc>>().Add(doc);

看起来我需要在添加或更新文档时让 SolrNet(或 Solr)忽略 score 属性,并且仅在检索文档时使用它。

有什么办法可以做到吗?

【问题讨论】:

    标签: solr solrnet


    【解决方案1】:

    我通过有两个单独的类来实现这一点。一个映射到作为搜索结果从索引中检索到的文档,另一个用于将项目添加到索引中。因此,在这种情况下,您可以执行以下操作:

     class MyDoc
     {
          [SolrUniqueKey("doc_id")]
          public string DocId { get; set; }
    
          [SolrField("foo")]
          public string Foo { get; set; }
    
          [SolrField("bar")]
          public string Bar { get; set; }
     }
    
    
     class MyDocResult
     {
          [SolrUniqueKey("doc_id")]
          public string DocId { get; set; }
    
          [SolrField("foo")]
          public string Foo { get; set; }
    
          [SolrField("bar")]
          public string Bar { get; set; }
    
          [SolrField("score")]
          public double Score { get; set; }
     }
    

    确保你初始化了两个指向同一个 solr url 的类。 Startup.Init("http://localhost:8983/solr"); Startup.Init("http://localhost:8983/solr");

    然后你可以添加:

      ServiceLocator.Current.GetInstance<ISolrOperations<MyDoc>>().Add(doc);
    

    然后查询:

      var solr ServiceLocator.Current.GetInstance<ISolrOperations<MyDocResult>>();
      var results = solr.Query("foo bar");
    

    如果您不想创建两个单独的类,也可以考虑使用 SolrNet 的 Dynamic or Fully Loose Mapping 选项。

    【讨论】:

      【解决方案2】:

      如果你让你的 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
        相关资源
        最近更新 更多