Ответ 1
Вы должны иметь возможность установить значение OptOut
атрибута ElasticProperty
, например, следующее:
[ElasticProperty(OptOut = true)]
public string UnivId { get; set; }
Я создал ниже объект, который будет сопоставлен с типом 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; }
}
Вы должны иметь возможность установить значение OptOut
атрибута ElasticProperty
, например, следующее:
[ElasticProperty(OptOut = true)]
public string UnivId { get; set; }
В NEST 2.0 ElasticPropertyAttribute заменяется на атрибуты типа (StringAttribute, DateAttribute...). Я использовал параметр Ignore для исключения свойства.
Пример для строки:
[String(Ignore = true)]
public string Id {get;set;}
При использовании Гнезда 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; }
Я нашел это полезным при частичном обновлении документа, но хотел повторно использовать тот же класс С# для индексации и избежать перезаписи существующих значений в индексе.