Определение сопоставления обновлений - ELasticSearch с использованием Scala - PullRequest
0 голосов
/ 07 февраля 2020

Я хочу знать, как обновить отображение существующего индекса. У меня есть ИНДЕКС:

{
    "state": "xxx",
    "settings": {
        "index": {
            "creation_date": "xxx",
            "number_of_shards": "xxx",
            "number_of_replicas": "xxx",
            "uuid": "xxx",
            "version": {
                "created": "xxx"
            }
        }
    },
    "mappings": {
        "es_content_entry": {
            "properties": {
                "input": {
                    "properties": {
                        "zipCode": {
                            "type": "string"
                        },
                        "address": {
                            "type": "string"
                        },
                        "cityName": {
                            "type": "string"
                        },
                    }
                }
            }
        }
    }
}

Я обновляю отображение, используя scala для этого ИНДЕКСА, например: CheckFieldMappingResult - это объект с

indexName: String,
entryType: String,
path: Seq[String],
localMapping: Option[TypedFieldDefinition],
remoteJsonMapping : Option[JsObject],
isConsistent: Boolean,
status: String

val remoteMissingObject: Seq[CheckFieldMappingResult] = mappingConsistensyResult.filter(p => p.status == "REMOTE_MISSING")

    val entryType: Seq[String] = remoteMissingObject.map(_.entryType)
    val path: Seq[Seq[String]] = remoteMissingObject.map(_.path)
    val foo: Seq[TypedFieldDefinition] = remoteMissingObject.map(_.localMapping.get)
    print(foo)

for (remote <- remoteMissingObject)yield {
    esClient.execute{put
    putMapping(INDEX_NAME/remote.entryType).fields {
        val too: String = path.flatten.head
        println(too)
        val foo: TypedFieldDefinition = remote.localMapping.get
        foo
    }

    }
}

. мне этот вывод:

{
    "state": "xxx",
    "settings": {
        "index": {
            "creation_date": "xxx",
            "number_of_shards": "xxx",
            "number_of_replicas": "xxx",
            "uuid": "xxx",
            "version": {
                "created": "xxx"
            }
        }
    },
    "mappings": {
        "es_content_entry": {
            "properties": {
                "additionnalInfos": {
                    "type": "string"
                },
                "input": {
                    "properties": {
                        "zipCode": {
                            "type": "string"
                        },
                        "address": {
                            "type": "string"
                        },
                        "cityName": {
                            "type": "string"
                        },
                    }
                }
            }
        }
    }
}

Он добавляет дополнительную информацию в начале индекса, но я хочу добавить этот путь INDEX_NAME\es_content_entry\input\addtionalinfos Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Я создал объект TypedFieldDefination для всех значений пути.

for(

  pathToken <- path.reverse.drop(1)

) {

  fullTypedFieldDefinition = FieldDefinition.objectField(Seq(fullTypedFieldDefinition))(pathToken)

}
0 голосов
/ 07 февраля 2020

astic4s - это библиотека на основе Scala, которая поддерживает создание индекса.

https://github.com/sksamuel/elastic4s
...