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

Ниже я создал объект, который будет сопоставлен с типом 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; }
}

person vish.Net    schedule 14.04.2014    source источник


Ответы (3)


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

 [ElasticProperty(OptOut = true)]
 public string UnivId { get; set; }
person Paige Cook    schedule 14.04.2014
comment
OMG, какое плохое название свойства, мне тоже потребовалось время, чтобы понять это.. Спасибо - person Funbit; 18.08.2014
comment
в чем разница между выходом и [ElasticProperty(Index = FieldIndexOption.No)]? они делают одну и ту же работу? - person Emil; 12.01.2016
comment
только для людей, когда-либо оказавшихся здесь. Разница между этими двумя объясняется на этом URL. stackoverflow.com/questions/34748258/ - person Emil; 13.01.2016
comment
Кто-нибудь знает, как это сделать в Nest 2? - person beruic; 03.03.2016
comment
@beruic, stackoverflow.com/a/35992605/443310 Александр Б только что пролил свет на это - person I.G. Pascual; 15.03.2016

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

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

[String(Ignore = true)]
public string Id {get;set;}
person Alexandre B    schedule 14.03.2016
comment
Спасибо чувак! Кстати, знаете ли вы, как игнорировать вложенные свойства в сопоставлении базы кода (в NEST 2.0)? - person I.G. Pascual; 15.03.2016
comment
@I.G.Pascual взгляните на документы automap, чтобы узнать, как игнорировать свойства — elastic.co/guide/en/elasticsearch/client/net-api/current/ - person Russ Cam; 10.05.2016
comment
@RussCam, когда они только что обновили эти документы?? Это замечательно! - person I.G. Pascual; 10.05.2016

При использовании Nest 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);

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

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

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

person Ray    schedule 06.06.2019