我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Elasticsearch中mapping值得注意的一些小细节

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Elasticsearch中mapping值得注意的一些小细节

Elasticsearch中mapping值得注意的一些小细节

简介

在Elasticsearch中mapping有很多可以配置的地方,但是使用多了就会发现,一般情况有关mapping最常用、也最实用的就简单的几个需要注意的地方。

下面就简单的介绍一下关于这些mapping中值得注意的地方。

当然,如果想要了解更多关于mapping的知识,可以参考后面给的参考链接。

添加mapping

# 添加为索引添加mapping
curl -X PUT http://localhost:9200/index-name/_mapping
# 查看索引的mapping
curl -X GET http://localhost:9200/index-name/_mapping

下面是添加mapping的body部分:

{
  "mappings": {
      "dynamic": "strict",
      "properties": {
        "title": {
          "type": "text",
          "norms":false,
          "doc_values":false
        },
        "name": {
          "type": "keyword"
        },
        "attach": {
          "type": "text"
        }
      }
  }
}

在mapping中,dynamic参数建议设置为"strict",这样当添加的文档中有mapping中没有的字段就可以获取到异常。当然,如果你只想有多的字段也无所谓,可以将dynamic设置为false,这样mapping中没有的字段就会被忽略。

默认dynamic为true,如果文档中有mapping中没有的字段,就会在mapping中添加相应的字段,并且做出类型推断。这样虽然最方便,但是不利于维护的。

字段中值得考虑设置的参数:

  1. 如果不需要排序、聚合doc_values最好设置为false,例如邮箱、用户名等
  2. 对于text类型,如果不需要参与评分,norms最好设置为false
  3. 如果只是存储,不想搜索字段,enable可以设置为false
  4. 如果需要字段参与评分,但是不对字段分词,可以设置index为false

更新mapping

curl -X PUT http://localhost:9200/index-name/_mapping
{
  "properties": {
    "gid": {
      "type": "text",
      "index": false
    }
  }
}

更新索引的mapping也是使用的PUT,值得注意的点是:

  1. mapping不能删除、修改字段和参数,只能添加字段和参数
  2. 与添加mapping不同,更新mapping,最外层没有mapping,直接从properties开始

如果,不需要设置动态模板、dynamic等参数的话,添加mapping的时候也可以直接从properties开始

Java 方式添加mapping

@Test
public void addMapping() throws Exception {
    HttpHost httpHostOne = new HttpHost("127.0.0.1", 9200, "http");
    RestClientBuilder builder = RestClient.builder(httpHostOne);
    RestHighLevelClient client = new RestHighLevelClient(builder);
    String indexName = "index-name";
    IndicesClient indicesClient = client.indices();
//        mapping是针对索引,所以先添加索引,当然也可以在添加索引的时候就设置
    CreateIndexRequest createIndexRequest = new CreateIndexRequest(indexName).settings(getDefaultSetting());
    indicesClient.create(createIndexRequest, RequestOptions.DEFAULT);

    XContentBuilder mapping = XContentFactory.jsonBuilder()
            .startObject()
            .startObject("properties")
            .startObject("gid").field("type", "keyword").field("doc_values",false).endObject()
            .startObject("serverId").field("type", "integer").endObject()
            .endObject()
            .endObject();
    PutMappingRequest putMappingRequest = new PutMappingRequest(indexName).source(mapping);
    indicesClient.putMapping(putMappingRequest, RequestOptions.DEFAULT);
}

private static Settings getDefaultSetting(){
    return Settings.builder()
            .put("index.refresh_interval", "60s")
            .put("index.number_of_shards", "3")
            .put("index.number_of_replicas", "1")
            .build();
}

参考

mapping mapping模板

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Elasticsearch中mapping值得注意的一些小细节

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Elasticsearch中mapping值得注意的一些小细节

简介在Elasticsearch中mapping有很多可以配置的地方,但是使用多了就会发现,一般情况有关mapping最常用、也最实用的就简单的几个需要注意的地方。下面就简单的介绍一下关于这些mapping中值得注意的地方。当然,如果想要了解更多关于mappi
Elasticsearch中mapping值得注意的一些小细节
2018-05-03

Web测试中需要注意的细节有哪些

这篇文章主要介绍了Web测试中需要注意的细节有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Web测试中需要注意的细节有哪些文章都会有所收获,下面我们一起来看看吧。1、页面显示部分(1)首先关注页面是否能显
2023-06-05

Android开发中使用单例模式的一个小的注意点(在私有构造中做一些初始化的问题)

说在最前面:本篇文章不是讲单例模式有哪几种创建方式以及各自的利弊,也不说什么情况下单例模式失效以及内存泄漏等类似面试题,只说个人在应用中想要总结的一个小问题,如果冲着上面说的内容来的,那可以继续找其他的了[笑哭.gif]。 单例模式和其他设
2022-06-06

编程热搜

目录