如何使用elastic4s将带有映射模板的索引放到弹性搜索中?

时间:2015-04-08 04:51:33

标签: scala elasticsearch elastic4s

我希望使用动态模板创建索引,并为字符串字段分析。我已经为弹性搜索创建了查询,但是如何将其转换为elastic4s语句? (版本elastic4s 1.3.x优先)

陈述是:

PUT /myIndex
{
    "mappings": {
        "myType": {
            "dynamic_templates": [
                {
                    "templateName": {
                        "match":              "*",
                        "match_mapping_type": "string",
                        "mapping": {
                            "type":           "string",
                            "index" : "not_analyzed",
                            "omit_norms" : true
                    }
                  }
                }
            ]
}}}

P.S。

可能是通过执行这个“原始”请求来创建这个索引,但我没有找到如何用elastic4s 1.3.4做到这一点:(

2 个答案:

答案 0 :(得分:2)

Elastic4s(从1.5.4开始)在创建索引时支持动态模板。所以你可以这样做:

 val req = create.index("my_index").mappings(
    "my_type" templates (
      template name "es" matching "*_es" matchMappingType "string" mapping {
        field withType StringType analyzer SpanishLanguageAnalyzer
      },
      template name "en" matching "*" matchMappingType "string" mapping {
        field withType StringType analyzer EnglishLanguageAnalyzer
      }
    )
  )

所以你发布的例子的等价物是:

  create.index("my_index").mappings(
    "my_type" templates (
      template name "templateName" matching "*" matchMappingType "string" mapping {
        field typed StringType index NotAnalyzed omitNorms true
      }
  )

答案 1 :(得分:2)

有时,在原始JSON中管理映射会更容易。您可以将原始JSON放在文件上,以便无需重新构建应用程序即可进行更新。如果要使用此原始JSON创建索引,可以执行以下操作:

client.execute {
    create index "myIndex" source rawMapping
}

其中rawMapping是包含原始JSON内容的字符串。