代码之家  ›  专栏  ›  技术社区  ›  JP.

可以用solrnet映射复杂类型吗

  •  3
  • JP.  · 技术社区  · 14 年前

    我在ASP.NET MVC应用程序中对一些简单的场景使用solr和solr net。对于一对一的映射,当我将一个POCO映射到一个文档时,一切都正常。 非常 顺利。但是,我想知道是否可以映射更复杂的场景,如下面所示。基本上我有一个包含一个子拍卖项的拍卖类

        public class Auction
        {
          public virtual int ID { get; set; }
          public virtual string Name { get; set; }
          public virtual AuctionItem {get;set;} 
          public virtual DateTime StartDate { get; set; }
          public virtual DateTime EndDate { get; set; }
        }
    
    
        public class AuctionItem 
        {
          public virtual int ID { get; set; }
          public virtual string ItemName{ get; set; } 
          public virtual string ItemDescription{ get; set; }
          public virtual Double ItemPrice{get;set;} 
        }
    

    显然,我可以用代码中的属性映射拍卖项目,但我想知道如何在solr文档中包括itemname/itemdescription/itemprice。显然,这里的希望是不要压扁我的对象图。有没有办法做到这一点?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Mauricio Scheffer    14 年前

    它现在是一个 open issue (意思是说 有机会实施它!;-)

    无论如何,我建议平展您的类,这样更明确地说,只有一个表。用 Solr wiki :

    Solr提供了一张表。在索引中存储集合数据库表通常需要取消某些表的规范化。避免非规范化的尝试通常会失败。

        2
  •  3
  •   evgen mordak    6 年前

    我们用[jsonignore]和简单的getter来创建分组对象,解决了这个问题:

    public class Company
    {
        /// <summary>
        /// Company location
        /// </summary>
        public Location Location => new Location(Latitude, Longitude);
    
        // hide from json, but retrieve from solr
        [JsonIgnore, SolrField("latlng_0_coordinate")]
        public double Latitude { get; set; }
    
        // hide from json, but retrieve from solr
        [JsonIgnore, SolrField("latlng_1_coordinate")]
        public double Longitude { get; set; }
    }