ElasticSearch 实战:配置ES的映射 (mapping)

在Elasticsearch中,映射(mapping)是用于定义索引中字段(field)的结构和行为的重要组成部分。映射决定了如何分析文本、如何存储数值、日期以及其他复杂类型的数据。下面是一些实战中配置Elasticsearch映射的基本步骤和要点:

创建映射前的准备工作:

  1. 理解字段类型

    • Elasticsearch支持多种数据类型,如string (textkeyword)、numeric(整数、浮点数)、booleandateobjectnestedgeo_pointgeo_shape等。
  2. 决定是否启用动态映射

    • 动态映射可以根据插入文档的结构自动创建映射。默认情况下,Elasticsearch启用动态映射。
      • dynamic: true - 自动添加新字段并根据内容推断类型。
      • dynamic: false - 忽略新字段,需要手动定义所有映射。
      • dynamic: strict - 当遇到未定义的新字段时,拒绝索引文档。

手动创建映射示例:

PUT /my_index
{
  "mappings": {
    "properties": {
      "title": { 
        "type": "text",
        "analyzer": "standard"
      },
      "content": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      },
      "author": {
        "type": "keyword"
      },
      "post_date": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      },
      "tags": {
        "type": "nested",
        "properties": {
          "name": {
            "type": "text"
          },
          "category": {
            "type": "keyword"
          }
        }
      }
    }
  }
}
  • 在上述示例中,我们创建了一个名为my_index的索引,并定义了其映射结构。
  • title字段被定义为text类型,并使用标准分析器。
  • content字段包含一个子字段keyword以支持全文搜索和精确匹配。
  • author字段作为keyword处理,便于排序或聚合操作。
  • post_date是一个日期类型,指定了多种格式以便解析不同格式的日期字符串。
  • tags是一个嵌套(nested)对象,它内部有自己的属性映射。

动态映射调整:

若要调整动态映射的行为,可以在索引级别或字段级别指定动态映射规则:

PUT /my_index
{
  "mappings": {
    "dynamic": "strict", // 或 "false"
    "properties": {
      "custom_field": {
        "type": "text",
        "dynamic": "true" // 即使全局动态映射关闭,此字段仍允许动态添加
      }
    }
  }
}

注意事项:

  • 映射一旦创建并有文档被索引后,通常不可更改字段类型,除非重新创建索引。
  • 对于特定场景如地理位置信息或自定义分析器,需要准确地配置映射。
  • 使用动态映射虽然方便,但可能会导致意外的映射创建,特别是对于复杂数据结构或者需要特殊处理的字段,建议采用手动映射以确保一致性与准确性。

使用客户端库(如Nest)创建映射:

如果你使用的是像Nest这样的客户端库,可以通过编写类映射(Poco Mapping)的方式来声明索引的映射结构,并通过客户端API将其发送到Elasticsearch服务器上创建或更新映射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值