Индексируйте значение Enum, а не строку

Можно ли индексировать значение Enum вместо его строкового представления, используя Solrnet?

Скажем, мне нужно следующее перечисление:

[Serializable]
[Flags] 
public enum Gender
{
  Male = 0,
  Female = 1
}

и добавить атрибут Solr к Gender свойство User учебный класс:

[SolrField("gender")]
public virtual Gender Gender { get; set; }

Если я индексирую сущность, используя:

solr.Add(user)

тогда он будет индексировать "мужской" как пол вместо 0. Возможно ли вместо этого индекс 0?

Изменить: я бы предпочел не добавлять дополнительные свойства для этого, как предлагает Ондрей.

2 ответа

Решение

Вы можете сделать это, внедрив ISolrFieldSerializer. Если тип IsEnum, сериализуйте, приведя к int. В противном случае делегируйте DefaultFieldSerializer. Используйте другие полевые сериализаторы для справки.

Подключение вашего полевого сериализатора зависит от выбранного контейнера IoC, проверьте документацию контейнера.

Попробуй это:

[SolrField("gender")]
public int GenderAsInt
{
    get { return (int) Gender; }
    set { Gender = (Gender) value; }
}

public virtual Gender Gender { get; set; }

Также обратите внимание, что объявление вашего enum как [Flags] не имеет особого смысла:

  • Вряд ли кто-нибудь будет Male а также Female
  • Male будет интерпретироваться как значение по умолчанию по отношению к текущим значениям полей перечисления
Другие вопросы по тегам