Ignore mapping fields in Elasticsearch & Nest

31 Views Asked by At

I use Nest for Elasticsearch and try to index an object, only by specific properties, and ignore other ones. In this example, I just want to ignore only one filed, but it doesn't work.

var settings = new ConnectionSettings(connectionPool)
    .BasicAuthentication(username, password)
    .ServerCertificateValidationCallback(
        CertificateValidations.AuthorityIsRoot(cert))
    .DefaultIndex("myindexname")
    .DefaultMappingFor<MyObject>(i =>
        i.Ignore(p => p.MyIgnoreProperty));

var elasticClient = new ElasticClient(settings);

And I got the error:
"System.NullReferenceException: Object reference not set to an instance of an object.\n at Nest.FieldExpressionVisitor.<>c.<Resolve>b__3_0(String s)\n at System.Linq.Enumerable.Sum[TSource,TResult,TAccumulator](IEnumerable`1 source, Func`2 selector)\n at Nest.FieldExpressionVisitor.Resolve(Expression expression, Boolean toLastToken)\n at Nest.FieldResolver.Resolve(Expression expression, MemberInfo member, Boolean toLastToken)\n at Nest.FieldResolver.ResolveFieldName(Field field)\n at Nest.FieldResolver.Resolve(Field field)\n at Nest.Inferrer.Field(Field field)\n at Nest.FieldFormatter.Serialize(JsonWriter& writer, Field value, IJsonFormatterResolver formatterResolver, Boolean serializeAsString)\n at Nest.FieldFormatter.Serialize(JsonWriter& writer, Field value, IJsonFormatterResolver formatterResolver)\n at Nest.FieldsFormatter.Serialize(JsonWriter& writer, Fields value, IJsonFormatterResolver formatterResolver)\n at Elasticsearch.Net.Nest_IMultiMatchQueryFormatter3.Serialize(JsonWriter&, IMultiMatchQuery, IJsonFormatterResolver)\n at Nest.ReadAsFormatter`2.SerializeInternal(JsonWriter& writer, T value, IJsonFormatterResolver formatterResolver)\n at Nest.ReadAsFormatter`2.Serialize(JsonWriter& writer, T value, IJsonFormatterResolver formatterResolver)\n at Elasticsearch.Net.Nest_IQueryContainerFormatter2.Serialize(JsonWriter&, IQueryContainer, IJsonFormatterResolver)\n at Nest.QueryContainerInterfaceFormatter.Serialize(JsonWriter& writer, IQueryContainer value, IJsonFormatterResolver formatterResolver)\n at Nest.QueryContainerFormatter.Serialize(JsonWriter& writer, QueryContainer value, IJsonFormatterResolver formatterResolver)\n at Elasticsearch.Net.Nest_ISearchRequestFormatter1.Serialize(JsonWriter&, ISearchRequest, IJsonFormatterResolver)\n at Nest.ReadAsFormatter`2.SerializeInternal(JsonWriter& writer, T value, IJsonFormatterResolver formatterResolver)\n at Nest.ReadAsFormatter`2.Serialize(JsonWriter& writer, T value, IJsonFormatterResolver formatterResolver)\n at Elasticsearch.Net.Utf8Json.JsonSerializer.SerializeAsync[T](Stream stream, T value, IJsonFormatterResolver resolver)\n at Elasticsearch.Net.SerializableData`1.WriteAsync(Stream writableStream, IConnectionConfigurationValues settings, CancellationToken cancellationToken)\n at Elasticsearch.Net.HttpConnection.SetContentAsync(HttpRequestMessage message, RequestData requestData, CancellationToken cancellationToken)\n at Elasticsearch.Net.HttpConnection.RequestAsync[TResponse](RequestData requestData, CancellationToken cancellationToken)\n at Elasticsearch.Net.RequestPipeline.CallElasticsearchAsync[TResponse](RequestData requestData, CancellationToken cancellationToken)\n at Elasticsearch.Net.Transport`1.RequestAsync[TResponse](HttpMethod method, String path, CancellationToken cancellationToken, PostData data, IRequestParameters requestParameters)"

Without this line

.DefaultMappingFor(i => i.Ignore(p => p.MyIgnoreProperty)

it works and all properties are indexed which is not what I want to achieve.

How to ignore specific properties in a proper way?

0

There are 0 best solutions below