Индексируйте значение 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
будет интерпретироваться как значение по умолчанию по отношению к текущим значениям полей перечисления