Исключить свойство от индексации

Я создал ниже объект, который будет сопоставлен с типом ElasticSearch. Я хотел бы исключить свойство UnivId для индексации:

[ElasticType(Name = "Type1")]
public class Type1
{
    // To be ignored
    public string UnivId { get; set; }

    [ElasticProperty(Name="Id")]
    public int Id { get; set; }

    [ElasticProperty(Name = "descSearch")]
    public string descSearch { get; set; }
}

Ответы

Ответ 1

Вы должны иметь возможность установить значение OptOut атрибута ElasticProperty, например, следующее:

 [ElasticProperty(OptOut = true)]
 public string UnivId { get; set; }

Ответ 2

В NEST 2.0 ElasticPropertyAttribute заменяется на атрибуты типа (StringAttribute, DateAttribute...). Я использовал параметр Ignore для исключения свойства.

Пример для строки:

[String(Ignore = true)]
public string Id {get;set;}

Ответ 3

При использовании Гнезда 5. 0+, в документе несколько способов игнорировать поле:


Ignore атрибут должен работать:

using Nest;

[Ignore]
public string UnivId { get; set; }

JsonIgnore также можно использовать, поскольку Newtonsoft.Json является сериализатором по умолчанию, используемым Nest.


Другой способ - использовать сопоставления атрибутов, зависящие от типа, связанные со свойством. Например, поскольку это string используйте атрибут Text:

[Text(Ignore = true)]
public string UnivId { get; set; }

или если int использует Number:

[Number(Ignore = true)]
public int Id { get; set; }

Кроме того, вместо использования явного атрибута в свойстве сопоставление можно игнорировать с помощью .DefaultMappingFor<... в ConnectionSettings (более подробную информацию см. В документации).

var connectionSettings = new ConnectionSettings()
    .DefaultMappingFor<Type1>(m => m.Ignore(p => p.UnivId);

Однако, если вы хотите условно игнорировать атрибут, если значение равно нулю, используйте следующий атрибут Newtonsoft.Json с настройкой обработки нуля:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string UnivId { get; set; }

Я нашел это полезным при частичном обновлении документа, но хотел повторно использовать тот же класс С# для индексации и избежать перезаписи существующих значений в индексе.