mongo-connectorは、MongoデータベースをES、Solr、または別のMongoDBなどの別のターゲットシステムと同期することを目的としています。同期とは1:1のレプリケーションを意味するため、mongo-connectorがレプリケーション中にドキュメントを強化する方法はありません(また、その意図もありません)。
ただし、ES 5では、まもなくを使用できるようになります。ノードを取り込む ここで、処理パイプラインを定義できます。 a> インデックスを作成する前にドキュメントを充実させることが目標です。
更新
を変更することで、おそらく方法があります。 formatters.py
ファイル。
transform_value
Geopoint
を処理するケースを追加します :
if isinstance(value, dict):
return self.format_document(value)
elif isinstance(value, list):
return [self.transform_value(v) for v in value]
# handle Geopoint class
elif isinstance(value, Geopoint):
return self.format.document({'lat': value['lat'], 'lon': value['lon']})
...
アップデート2
transform_element
機能
(104行目):
def transform_element(self, key, value):
try:
# add these next two lines
if key == 'GeoPoint':
value = {'lat': value['lat'], 'lon': value['lon']}
# do not modify the initial code below
new_value = self.transform_value(value)
yield key, new_value
except ValueError as e:
LOG.warn("Invalid value for key: %s as %s"
% (key, str(e)))
アップデート3
もう1つ試すことができるのは、変換
。以前に言及しなかった理由は、ES 2.0で非推奨になったためですが、ES 5.0では、取り込みノードがあり、取り込み時に削除
プロセッサ
マッピングは次のように定義できます:
PUT my_index2
{
"mappings": {
"my_type2": {
"transform": {
"script": "ctx._source.geopoint.remove('alt'); ctx._source.geopoint.remove('valid')"
},
"properties": {
"geopoint": {
"type": "geo_point"
}
}
}
}
}
注: script.inline:true
を追加して、動的スクリプトを有効にしてください。 elasticsearch.yml
へ ESノードを再起動します。
何が起こるかというと、 alt
フィールドは、保存されている _source
に引き続き表示されます ただし、インデックスは作成されないため、エラーは発生しません。
ES 5では、 remove
を使用してパイプラインを作成するだけです。 このようなプロセッサ:
PUT _ingest/pipeline/geo-pipeline
{
"description" : "remove unsupported altitude field",
"processors" : [
{
"remove" : {
"field": "geopoint.alt"
}
}
]
}