Elasticsearch возвращает «Отклонение обновления отображения» при копировании объектов монго, но я не понимаю, почему - PullRequest
0 голосов
/ 14 октября 2018

Я получаю следующую ошибку:

Rejecting mapping update to [test.pictures] as the final mapping would have more than 1 type: [_doc, pictureobject]

Я понимаю, что это проблема, связанная с ES6, как объясняется в этом сообщении:

https://www.elastic.co/guide/en/elasticsearch/reference/6.0/breaking-changes-6.0.html

Однако я не понимаю, откуда возникла ошибка:

У меня есть объект Монго с именем PictureObject.Этот объект также используется совместно с ES.

[Nest.ElasticsearchType, BsonIgnoreExtraElements]
public class PictureObject : DataStoreObject
{
    [Nest.Ignore]                           public string       OwnerId             { get; set; }
    [Nest.Ignore, BsonIgnoreIfDefault]      public string       AlbumId             { get; set; }
                                            public Flags        Flags               { get; set; }
    [Nest.Text, BsonIgnoreIfDefault]        public string       Title               { get; set; }
    [Nest.Text]                             public string       Tags                { get; set; }
    [Nest.Ignore]                           public int          Width               { get; set; }
    [Nest.Ignore]                           public int          Height              { get; set; }
    [Nest.Ignore]                           public string       Hash                { get; set; }
    [Nest.Number(Nest.NumberType.Integer)]  public int          VotesUp             { get; set; }
    [Nest.Ignore]                           public int          VotesDown           { get; set; }
    [Nest.Ignore]                           public int          Shows               { get; set; }
    [Nest.Number(Nest.NumberType.Integer)]  public int          Views               { get; set; }
    [Nest.Ignore, BsonIgnoreIfDefault]      public string       Link                { get; set; }
    [Nest.Ignore]                           public string       OriginUrl           { get; set; }
    [Nest.Ignore]                           public string       OriginTags          { get; set; }
    [Nest.Ignore, BsonIgnoreIfDefault]      public string       OriginTitle         { get; set; }
}

Как видите, класс украшен атрибутами Mongo и ES.

Затем у меня есть сопоставление ES:

            var I = Client.CreateIndex(INDEX_NAME, Ci => Ci
                .Settings(S => S
                    .Analysis(A => A
                        .CharFilters(Cf => Cf.Mapping("expressions",
                            E => E.Mappings(
                                "test ab => testab",
                                "test bc => testbc"))
                        )
                        .TokenFilters(Tf => Tf.Synonym("synonyms",
                            Descriptor => new SynonymTokenFilter
                            {
                                Synonyms = new[]
                                {
                                    "syna1 => syna2, syna3",
                                    "synb1 => synb2, synb3"
                                },
                                Tokenizer = "whitespace"
                            })
                        )
                        .Analyzers(Analyzer => Analyzer
                            .Custom("index", C => C
                                .CharFilters("html_strip", "expressions")
                                .Tokenizer("standard")
                                .Filters("synonyms", "standard", "lowercase", "stop")
                            )
                            .Custom("search", C => C
                                .CharFilters("expressions")
                                .Tokenizer("standard")
                                .Filters("synonyms", "standard", "lowercase", "stop")
                            )
                        )
                    )
                )
                .Mappings(Mapping => Mapping
                    .Map<PictureObject>(Map => Map
                        .AutoMap()
                        .Properties(P => P
                            .Text(T => T
                                .Name(N => N.Title)
                                .Analyzer("index")
                                .SearchAnalyzer("search")
                            )
                            .Text(T => T
                                .Name(N => N.Tags)
                                .Analyzer("index")
                                .SearchAnalyzer("search")
                            )
                        )
                    )
                )
            );

Моя цель - иметь соответствие 1-1 между Монго и ЭС, со всеми изменениями, происходящими из Монго.Я хочу, чтобы некоторые поля игнорировались при копировании, и я хочу иметь возможность выполнять текстовый поиск с синонимами по некоторым конкретным полям.

Я использую Monstache для копирования объектов монго, из оплога, в ES,В какой момент элемент PictureObject вступает в конфликт с _doc?мне совершенно непонятно все, что касается индекса и типа, и я не вижу, что я делаю неправильно или как это исправить.

...