Эта проблема, похоже, связана с использованием XDCR в couchbase. Если бы я имел следующие простые объектыПроблемы при репликации с ковша couchbase в индекс elasticsearch?
1: { "name" : "Mark", "age" : 30}
2: { "name" : "Bill", "age" : "forty"}
и установить индекс elasticsearch как таковой
curl -XPUT 'http://localhost:9200/test/couchbaseDocument/_mapping' -d '
{
"couchbaseDocument" : {
"dynamic_templates": [
{
"store_generic": {
"match": "*",
"mapping": {
"store": "yes"
}
}
}
]
}
}'
то я могу добавить два объекта к этому индексу, используя REST API
curl -XPUT localhost:9200/test/couchbaseDocument/1 -d '{
"name" : "Mark",
"age" : 30
}'
curl -XPUT localhost:9200/test/couchbaseDocument/2 -d '{
"name" : "Bill",
"age" : "forty"
}'
Теперь они доступны для поиска (несмотря на то, что «возраст» равен long
для одного и string
для другого.
Если, однако, я сохранил эти два объекта в couchbase ведро (а не прямо к elasticsearch) и настроить XDCR первый объект реплицируется хорошо, но вторая терпит неудачу из-за ошибки
не удалось выполнить основную индекс (индекс) {[test] [couchbaseDocument] [2], источник [{"doc": {"name": "Bill", "age": "forty"}, "meta": {"id": «2», «rev»: «8-00000b9360d0a0bf0000000000000000», «expiration»: 0, «flags»: 0}}]} org.elasticsearch.index.mapper.MapperParsingException: не удалось проанализировать [doc.age]
Я не могу понять, почему он работает через API REST, но не тогда, когда couchbase реплицирует одни и те же объекты.
Я последовал ответ, и использовал следующее отображение, чтобы получить вещи работать через XDCR
curl -XPUT 'http://localhost:9200/test/couchbaseDocument/_mapping' -d '
{
"couchbaseDocument" : {
"properties" : {
"doc": {
"properties" : {
"name" : {"type" : "string", "store" : "yes"},
"age" : {"type" : "string", "store" : "yes"}
}
}
}
}
}'
Теперь все объекты (несмотря на наличие различных типов для одних и тех же полей) реплицируются и поиска. Я не думаю, что нужно было включить подход dynamic_templates
, который я изначально пытался. Отображение работает.
Что бы я в ситуации, когда 'age' поле не не введено только после отображения были определены так что сначала введен как число, отображение обновляется, но затем его происходит как строка? В этом сценарии я не могу указать, чтобы он рассматривался как строка в исходном сопоставлении, потому что я не знаю, что это будет происходить как свойство. Имеет ли это смысл? –
Не получится. Первый документ, имеющий это поле, даст тип. И вы не можете изменить тип. Можно использовать шаблон, вы можете сказать, что все поля должны рассматриваться как строки. – dadoonet