Возможно ли сопоставление сложных типов с помощью SolrNet

StackOverflow https://stackoverflow.com/questions/3488711

  •  28-09-2019
  •  | 
  •  

Вопрос

Я использую Solr и SolrNet для нескольких простых сценариев в приложении ASP.NET MVC.Для сопоставлений один к одному, когда я сопоставляю один POCO с документом, все работает очень плавно.Тем не менее, мне интересно, возможно ли сопоставить более сложные сценарии, подобные приведенным ниже.По сути, у меня есть класс Auction, который содержит дочерний AuctionItem

    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;} 
    }

Очевидно, что я могу сопоставить элемент аукциона с атрибутами в моем коде, но мне интересно, как я могу включить, скажем, ItemName / ItemDescription / ItemPrice в мой документ Solr.Очевидно, что надежда здесь не в том, чтобы сгладить мой объектный график.Есть ли способ добиться этого?

Это было полезно?

Решение

В настоящее время это открытый вопрос (Который означает, что ты Есть возможность реализовать это! ;-)

Во всяком случае, я рекомендую выравнивать ваши классы, таким образом, это более явное, что есть только одна таблица. В словах Solr Wiki:

Solr предоставляет один стол. Хранение установленных таблиц базы данных в индексе, как правило, требует денормализации некоторых таблиц. Попытки избежать денормализации обычно проваливаются.

Другие советы

Мы решили такую проблему с помощью [JsonIgnore] и простого геттера для создания сгруппированного объекта:

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; }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top