Skip to content

Incorrect attachment field names after indexing #3502

@IvanSorokin

Description

@IvanSorokin

NEST/Elasticsearch.Net version: 6.4.0

Elasticsearch version: 6.5.1

Description of the problem including expected versus actual behavior: I am reindexing some document from 5.0 ES index to 6.5.1 using NEST client and bulk update. I am migrating document like this

Func<BulkIndexDescriptor<T>, BulkIndexDescriptor<T>> bulkIndexSelector = op =>
    {
        var desc = op.Document(hit.Source);
        if (ensureSameRouting)
            desc = desc.Routing(hit.Routing);
        if (indexName != null)
            desc = desc.Index(indexName);
        return desc;
    };

while scrolling documents in the older index. T is the class

[ElasticsearchType(Name = "notifications")]
    public class AttachmentElasticDocument
    {
        [Keyword]
        public String Name { get; set; }
        
        [Keyword]
        public Guid Id { get; set; }

        public Attachment Attachment { get; set; } //Nest class
        
        public JoinField Join { get; set; }
        
        [Keyword]
        public string Data { get; set; }
    }

After this I got documents with _ in the attachment field

attachment : {
   "_content": "text",
   "_language": "ru"
}

So my queries are not working because they are expecting "content" field name without underscore.
Then I decompiled the source and found this

  [ContractJsonConverter(typeof (AttachmentConverter))]
  public class Attachment
  {
    /// <summary>The author.</summary>
    [JsonProperty("author")]
    public string Author { get; set; }

    /// <summary>The base64 encoded content. Can be explicitly set</summary>
    [JsonProperty("content")]
    public string Content { get; set; }

    ...and so on
  }

No underscores are here in attributes too. How to get rid of them in the index?
I am using NEST Serializer.

ConnectionSettings.SourceSerializerFactory sourceSerializerFactory = (builtin, setts) => new JsonNetSerializer(builtin,
                                                                                                               setts,
                                                                                                               () =>
                                                                                                                   new
                                                                                                                   JsonSerializerSettings
                                                                                                                   {
                                                                                                                       TypeNameHandling = TypeNameHandling.Auto
                                                                                                                   });
var connectionSettings =
    new ConnectionSettings(connectionPool, sourceSerializer: sourceSerializerFactory);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions