elasticsearch,elastic4s,Scala,elasticsearch,Elastic4s" /> elasticsearch,elastic4s,Scala,elasticsearch,Elastic4s" />

Scala 使用Elastic4s的动态ElasticSearch映射

Scala 使用Elastic4s的动态ElasticSearch映射,scala,elasticsearch,elastic4s,Scala,elasticsearch,Elastic4s,我有一个文档,我想在elasticSearch上建立索引,该文档包含一些我无法预先知道的动态键,如下面示例中的“西班牙语”或“法语” "contents": { "title": { "spanish": "Hola amigos", "french" : "Bonjour les amis" } } 我使用elastic4s DSL来创建映射(),但是我找不到如何使用这个库创建基于“匹配”选项(如建议的)的动态映射,以便为路径contents.

我有一个文档,我想在elasticSearch上建立索引,该文档包含一些我无法预先知道的动态键,如下面示例中的“西班牙语”或“法语”

"contents": {
    "title": {
        "spanish": "Hola amigos",
        "french" : "Bonjour les amis"
    }
}
我使用elastic4s DSL来创建映射(),但是我找不到如何使用这个库创建基于“匹配”选项(如建议的)的动态映射,以便为路径contents.title下存储的每种语言指定不同的分析器


有轨道吗?:-)

elastic4s文档就是这么说的:()

其中StringSource扩展了DocumentSource
如果您能够将输入整理成JSON,这是最好的方法。

您目前无法在elastic4s Scala API中实现您想要的功能。但是您可以在JavaAPI中创建一个动态模板,并在其余调用中使用ScalaAPI


可以将动态模板设置为使用正则表达式并应用映射。但是,既然您将提前真正了解您的国家(只有大约200个),为什么不花时间进行映射呢?

dynamicTemplates(模板名称“NotAnalyzed”“match”“*”matchMappingType“string”映射(“type”typed StringType index NotAnalyzed))
映射定义处引导StackOveflow。scala:141
知道哪里错了吗?这是正确的
模板(Seq(模板名称“NotAnalyzed”'match'*“matchMappingType”字符串映射(“type”typed StringType index NotAnalyzed)):\u*)
您在此处传递的任何其他内容:Iterable或single instance在StackOverflow上失败OP询问的是映射而不是索引。正如正确识别的,此响应用于索引文档,而不是解决使用模板进行映射以解决问题的问题。然而,目的是在创建新字段时创建它们。然而,根据字段名位,我错过了自定义分析器。谢谢@ColeStanfield指出这一点。没问题,但如果你想编辑你的答案,以便更好地与问题保持一致,我很乐意重新说明这一点。
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)
}