Индексируйте значение Enum, а не строку - PullRequest
1 голос
/ 29 декабря 2011

Можно ли индексировать значение 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 ]

4 голосов
/ 30 декабря 2011

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

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

2 голосов
/ 29 декабря 2011

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

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

public virtual Gender Gender { get; set; }

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

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