Elasticsearch 高级操作-映射(三)

2023-05-08 11:26:57 浏览数 (1)

映射的动态属性

在定义映射时,还可以设置动态属性,以允许动态地添加新字段。默认情况下,Elasticsearch会自动创建动态映射,这意味着当您插入新的文档时,Elasticsearch会自动检测新字段的类型,并创建一个新的映射。但是,这可能会导致映射的不一致性,从而影响搜索结果的准确性。

为了解决这个问题,您可以设置动态属性为strict,这样当插入包含未知字段的文档时,Elasticsearch会抛出一个异常。例如:

代码语言:javascript复制
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "title": {
        "type": "text"
      }
    }
  }
}

在上述示例中,我们将动态属性设置为strict,这意味着当插入包含未知字段的文档时,Elasticsearch会抛出一个异常。

映射的其他属性

除了上述属性之外,映射还有其他一些属性可以设置,包括:

  • enabled属性:指示是否启用该字段。默认情况下,所有字段都是启用的。
  • coerce属性:指示是否在插入时将字段值强制转换为其指定的类型。默认情况下,不进行类型强制转换。
  • ignore_above属性:指示文本字段的最大长度。超出这个长度的文本将被截断。默认情况下,不进行截断。
  • index属性:指示是否对字段进行索引。默认情况下,所有字段都是索引的。
  • index_options属性:指示如何索引文本字段的内容。默认情况下,将为每个文档中的每个单词创建一个反向索引词条。
  • norms属性:指示是否启用归一化。归一化是一种优化技术,用于提高评分的准确性。默认情况下,启用归一化。
  • store属性:指示是否在文档中存储字段的值。默认情况下,不存储字段的值。

以下是一个具有多个属性的映射示例:

代码语言:javascript复制
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "english",
        "copy_to": ["combined_field"],
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        },
        "ignore_above": 100,
        "index_options": "positions",
        "norms": false,
        "store": true
      }
    }
  }
}

在上述示例中,我们为title字段设置了多个属性,包括使用英语分析器、将字段值复制到combined_field字段、定义一个子字段keyword、将文本截断为100个字符、仅为文本字段的位置创建反向索引词条、禁用归一化、将字段值存储在文档中。

0 人点赞