Couchbase - транспортный плагин Elasticsearch. Сопоставление с типами с использованием поля _class

Я использую couchbase с транспортным плагином elasticsearch. Моя проблема связана с сопоставлением документа couchbase с типом elasticsearch. Его можно отобразить добавив в elasticsearch.yml:

couchbase.typeSelector: org.elasticsearch.transport.couchbase.capi.RegexTypeSelector couchbase.typeSelector.documentTypesRegex.type: ^ type:. + $

а затем документ в couchbase с идентификатором «type: 123» преобразуется в тип «type» в elasticsearch.

Я не доволен этим решением, потому что оно определяет тип и формат поля идентификатора в couchbase, и это приводит к тому, что решение не является «элегантным» и может быть проблематичным.

Можно ли сопоставить документ, используя, например, поле "_class"? Это поле появляется после вставки документа в couchbase с помощью Java API. Я думаю, это будет намного лучшее решение.

Спасибо за помощь.


person esnosek    schedule 12.01.2016    source источник


Ответы (1)


Идентификатор документа в Couchbase неизменен, поэтому селектор типа основан на нем. Основание типа на некотором изменяемом атрибуте, таком как поле, позволило бы индексировать один и тот же документ в Couchbase для нескольких документов в Elasticsearch. Это означало бы потерю целостности данных.

Другими словами, первичный ключ документа в Couchbase - это id. Первичным ключом документа в Elasticseach является _uid, который создается путем объединения типа и идентификатора как {type}#{id}. Мы хотим, чтобы они совпадали, поэтому плагин обеспечивает это таким образом.

Кстати, если ваш тип основан на префиксе идентификатора, вам следует использовать не RegexTypeSelector, а DelimiterTypeSelector. Таким образом, вам нужно только указать разделитель (по умолчанию ':'), и он сопоставит все префиксы с типом. Избавляет вас от необходимости определять отдельное регулярное выражение для каждого типа.

couchbase.typeSelector: org.elasticsearch.transport.couchbase.capi.DelimiterTypeSelector
couchbase.typeSelector.documentTypeDelimiter: ':'
person David Ostrovsky    schedule 13.01.2016
comment
Спасибо за ответ, это многое объясняет. - person esnosek; 13.01.2016