sql >> Databáze >  >> NoSQL >> MongoDB

Podporuje Mongo-connector přidávání polí před vložením do Elasticsearch?

mongo-connector se zaměřuje na synchronizaci databáze Mongo s jiným cílovým systémem, jako je ES, Solr nebo jiný Mongo DB. Synchronizace znamená replikaci 1:1, takže nevím o žádném způsobu, jak by mongo-connector obohatil dokumenty během replikace (a ani to není jeho záměrem).

V ES 5 však brzy budeme moci používat přijímací uzly ve kterém budeme schopni definovat procesní potrubí jehož cílem je obohatit dokumenty předtím, než budou indexovány.

AKTUALIZACE

Pravděpodobně existuje způsob, jak upravit formatters.py soubor.

V transform_value Přidal bych případ pro zpracování 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']})

    ...

AKTUALIZACE 2

Zkusme jiný přístup úpravou transform_element funkce (na řádku 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)))

AKTUALIZACE 3

Další věc, kterou můžete zkusit, je přidat transform . Důvod, proč jsem to dříve nezmínil, je ten, že byla v ES 2.0 zastaralá, ale v ES 5.0 budete mít ingestové uzly a budete se o to moci postarat v době ingestu pomocí remove procesor

Mapování můžete definovat takto:

PUT my_index2
{
  "mappings": {
    "my_type2": {
      "transform": {
        "script": "ctx._source.geopoint.remove('alt'); ctx._source.geopoint.remove('valid')"
      },
      "properties": {
        "geopoint": {
          "type": "geo_point"
        }
      }
    }
  }
}

Poznámka:Ujistěte se, že povolíte dynamické skriptování přidáním script.inline: true na elasticsearch.yml a restartujte uzel ES.

Stane se, že alt pole bude stále viditelné v uloženém _source ale nebude indexován, a proto by neměla nastat žádná chyba.

S ES 5 byste jednoduše vytvořili kanál pomocí remove procesor, jako je tento:

PUT _ingest/pipeline/geo-pipeline
{
  "description" : "remove unsupported altitude field",
  "processors" : [
    {
      "remove" : {
        "field": "geopoint.alt"
      }
    }
  ]
}



  1. MongoDB Count celkový počet pravdivých a nepravdivých hodnot pro dokumenty odpovídající dotazu

  2. Mongo DB najde všechny záznamy s nejvyšší hodnotou v závislosti na klíčovém poli

  3. Topologie byla zničena při použití MongoDB s nativním ovladačem a Express.js

  4. MongoDB odhadovanýDocumentCount()