问题
I have a document that I want to index on elasticSearch, this document contains some dynamic keys that I can not know in advance, like "spanish" or "french" in the following example
"contents": {
"title": {
"spanish": "Hola amigos",
"french" : "Bonjour les amis"
}
}
I'm using the elastic4s DSL in order to make my mapping (Via the createIndex DSL), but I can not find how to create, with this library, a dynamic mapping based on the "match" option ( like suggested here), in order to specify a different analyzer for each language stored under the path contents.title.
Any track please ? :-)
回答1:
You can't do what you want in the elastic4s Scala API at the moment. But you can create a dynamic template in the Java API and use the Scala API for the rest of your calls.
The dynamic template can be set to use a regex and apply a mapping. But since you will really know your countries in advance (there's only ~200) why not just spend the time and make a mapping?
回答2:
This is how the elastic4s documentation says to do it : (https://github.com/sksamuel/elastic4s/blob/master/guide/index.md)
val settings = ImmutableSettings.settingsBuilder().put("cluster.name","blah")
val client = ElasticClient.remote("ip.address",portNum)
client.execute {
index into "indexname/indexType" doc StringSource(jsonDoc.toString)
}
where StringSource extends DocumentSource If you able to marshall your input into JSON, this is the best way to do it.
来源:https://stackoverflow.com/questions/23056292/dynamic-elasticsearch-mapping-using-elastic4s