sql >> データベース >  >> NoSQL >> MongoDB

Mongo-connectorは、Elasticsearchに挿入する前にフィールドを追加することをサポートしていますか?

    mongo-connectorは、MongoデータベースをES、Solr、または別のMongoDBなどの別のターゲットシステムと同期することを目的としています。同期とは1:1のレプリケーションを意味するため、mongo-connectorがレプリケーション中にドキュメントを強化する方法はありません(また、その意図もありません)。

    ただし、ES 5では、まもなくを使用できるようになります。ノードを取り込む ここで、処理パイプライン インデックスを作成する前にドキュメントを充実させることが目標です。

    更新

    を変更することで、おそらく方法があります。 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"
          }
        }
      ]
    }
    



    1. PyMongo-正規表現によるコレクションからのサブドキュメントの選択

    2. MongoDBAggregationのaddField操作内での$countの使用

    3. 一致の総数順に並べられた、タグがリストに含まれるドキュメントを取得します

    4. $ dateFromStringを使用して配列内の日付を変換するにはどうすればよいですか?