我可以将文本的默认类型定义为对象类型内的关键字吗?

Pat*_*ryk 0 mapping elasticsearch elasticsearch-6

假设我有以下映射:

{
    "mappings": {
        "_doc": {
            "properties": {
                "id":       {"type": "keyword"},
                "params":   {
                    "type": "object",
                },
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

params有很多带有数字和文本值的字段。我不想指定它的所有字段,但我想指定所有文本字段都应该是类型,keyword而不是text默认类型并进行分析(我想避免)。

我怎样才能做到这一点?我正在使用 ElasticSearch 6.7

ban*_*nuj 6

这称为动态模板(请参阅https://www.elastic.co/guide/en/elasticsearch/reference/6.7/dynamic-templates.html

对于您的问题,您可以按如下方式定义映射:

PUT my_index
{
  "mappings": {
    "_doc": {
      "dynamic_templates": [
        {
          "strings": {
            "match_mapping_type": "string",
            "mapping": {
              "type": "keyword"
            }
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这会将所有检测到的string字段转换为keyword. 如果您只想应用于字段的子集,则可以使用matchunmatchpath_match子句path_unmatch。(有关它们之间的差异,请参阅文档)。