Я получаю следующую ошибку:
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?мне совершенно непонятно все, что касается индекса и типа, и я не вижу, что я делаю неправильно или как это исправить.