Elasticsearch笔记七之setting,mapping,分片查询方式

摘要:
Elasticsearch笔记七之setting,mapping,分片查询方式setting通过setting可以更改es配置可以用来修改副本数和分片数。prett2:修改不存在索引shb03时可以指定副本和分片,如果shb03已经存在则只能修改副本curl-XPUThttp://192.168.79.131:9200/shb03-d'{"settings":{"number_of_shards":4,"number_of_replicas":2}}'shb03已经存在不能修改分片curl-XPUThttp://192.168.79.131:9200/shb03/_settings-d'{"index":{"number_of_replicas":2}}'mapping我们在es中添加索引数据时不需要指定数据类型,es中有自动影射机制,字符串映射为string,数字映射为long。
Elasticsearch笔记七之setting,mapping,分片查询方式

setting

通过setting可以更改es配置可以用来修改副本数和分片数。

1:查看,通过curl或浏览器可以看到副本分片信息

curl -XGEThttp://192.168.79.131:9200/shb01/_settings?pretty

http://192.168.79.131:9200/shb01/_settings?prett

Elasticsearch笔记七之setting,mapping,分片查询方式第1张

2:修改

不存在索引shb03时可以指定副本和分片,如果shb03已经存在则只能修改副本

curl -XPUT http://192.168.79.131:9200/shb03-d'{"settings":{"number_of_shards":4,"number_of_replicas":2}}'

Elasticsearch笔记七之setting,mapping,分片查询方式第2张

shb03已经存在不能修改分片

curl -XPUThttp://192.168.79.131:9200/shb03/_settings -d '{"index":{"number_of_replicas":2}}'


mapping

我们在es中添加索引数据时不需要指定数据类型,es中有自动影射机制,字符串映射为string,数字映射为long。通过mappings可以指定数据类型是否存储等属性。

1:查看mapping信息

curl -XGEThttp://192.168.79.131:9200/shb01/_mappings?pretty

http://192.168.79.131:9200/shb01/_mappings?pretty


Elasticsearch笔记七之setting,mapping,分片查询方式第3张

2:修改,通过mappings还可以指定分词器

操作不存在的索引

curl -XPUT http://192.168.79.131:9200/shb02-d'{"mappings":{"emp":{"properties":{"name":{"type":"string","indexAnalyzer":"ik","searchAnalyzer": "ik"}}}}}'

操作已存在的索引

curl -XPOSThttp://192.168.79.131:9200/crxy/shb02/_mapping-d'{"properties":{"name":{"type":"string","indexAnalyzer":"ik","searchAnalyzer": "ik"}}}'


java操作settings和mappings

  1. /**
  2. *settings,mappings
  3. *@throwsIOException
  4. *
  5. *org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
  6. *org.elasticsearch.common.xcontent.XContentBuilder;
  7. *org.elasticsearch.common.xcontent.XContentFactory;
  8. */
  9. @Test
  10. publicvoidtestSettingsMappings()throwsIOException
  11. {
  12. //1:settings
  13. HashMap<String,Object>settings_map=newHashMap<String,Object>(2);
  14. settings_map.put("number_of_shards",3);
  15. settings_map.put("number_of_replicas",1);
  16. //2:mappings
  17. XContentBuilderbuilder=XContentFactory.jsonBuilder()
  18. .startObject()
  19. .field("dynamic","stu")
  20. .startObject("properties")
  21. .startObject("id")
  22. .field("type","integer")
  23. .field("store","yes")
  24. .endObject()
  25. .startObject("name")
  26. .field("type","string")
  27. .field("store","yes")
  28. .field("index","analyzed")
  29. .field("analyzer","id")
  30. .endObject()
  31. .endObject()
  32. .endObject();
  33. CreateIndexRequestBuilderprepareCreate=transportClient.admin().indices().prepareCreate("shb01");
  34. prepareCreate.setSettings(settings_map).addMapping("stu",builder).execute().actionGet();
  35. }

一般在工作中关闭自动映射防止垃圾数据进入索引库,提前定义好索引库的字段信息当有非法的数据进来时会报错。如果不知道字段信息则开启。


分片查询

Es会将数据均衡的存储在分片中,我们可以指定es去具体的分片或节点钟查询从而进一步的实现es极速查询。

1:randomizeacross shards

随机选择分片查询数据,es的默认方式

2:_local

优先在本地节点上的分片查询数据然后再去其他节点上的分片查询,本地节点没有IO问题但有可能造成负载不均问题。数据量是完整的。

3:_primary

只在主分片中查询不去副本查,一般数据完整。

4:_primary_first

优先在主分片中查,如果主分片挂了则去副本查,一般数据完整。

5:_only_node

只在指定id的节点中的分片中查询,数据可能不完整。

6:_prefer_node

优先在指定你给节点中查询,一般数据完整。

7:_shards

在指定分片中查询,数据可能不完整。

8:_only_nodes

可以自定义去指定的多个节点查询,es不提供此方式需要改源码。

注:es的数据存放在/usr/local/elasticsearch-1.4.4/data,如果要升级es可先备份此目录

  1. /**
  2. *指定分片查询
  3. */
  4. @Test
  5. publicvoidtestPreference()
  6. {
  7. SearchResponsesearchResponse=transportClient.prepareSearch(index)
  8. .setTypes("add")
  9. //.setPreference("_local")
  10. //.setPreference("_primary")
  11. //.setPreference("_primary_first")
  12. //.setPreference("_only_node:ZYYWXGZCSkSL7QD0bDVxYA")
  13. //.setPreference("_prefer_node:ZYYWXGZCSkSL7QD0bDVxYA")
  14. .setPreference("_shards:0,1,2")
  15. .setQuery(QueryBuilders.matchAllQuery()).setExplain(true).get();
  16. SearchHitshits=searchResponse.getHits();
  17. System.out.println(hits.getTotalHits());
  18. SearchHit[]hits2=hits.getHits();
  19. for(SearchHith:hits2)
  20. {
  21. System.out.println(h.getSourceAsString());
  22. }
  23. }

免责声明:文章转载自《Elasticsearch笔记七之setting,mapping,分片查询方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SpringMvc 项目配置Vue上拉加载下拉刷新---vue-easyrefresh下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

elasticsearch版本不同,批量查询也不相同

网上搜到批量查询可以通过TransportClient实现,但官方推荐使用RestHighLevelClient实现 注意: We plan on deprecating the TransportClient in Elasticsearch 7.0 and removing it completely in 8.0. Instead, you shou...

十四、ES开启密码认证

一、为什么要用安全认证 每个人都能使用es-head插件跟kibana查看和修改es数据库,这是十分危险的。 所以需要给es-head和kibana添加密码认证。 二、环境准备 主机名 服务 IP es01 es+kibana 10.154.0.110 es02 es 10.154.0.111 我这使用的环境是两台es服务器,其中es0...

Elasticsearch集群容器化部署

基本配置示例 节点ip: 10.160.76.10,10.160.76.11,10.160.76.12节点配置: 内存64GB,硬盘200G,CPU16核Elasticsearch版本: 7.5.1 部署Elasticsearch节点 # esnode1: 10.160.76.10docker run -d --name esnode01 -v...

docker-compose部署EFK

参考 docker_compose_efk elasticsearch、kibana、filebeathttps://github.com/haimait/docker_compose_efk docker-compose 一键部署elasticsearch、kibana、filebeathttps://github.com/ExtraShen/docke...

elk日志收集架构

ELK日志系统整体架构:   结构解读: 整个架构从左到右,总共分为5层 最左边的是业务服务器集群,上面安装了filebeat做日志采集,同时把采集的日志分别发送给多个kafka 服务。 第二层、数据缓存层,把数据转存到本地的kafka broker+zookeeper 集群中。 第三层、数据转发层,这个单独的Logstash节点会实时去kafka br...

ElasticSearch 定时批量删除N天前的数据

描述: 之前我已经完成了使用ElasticSearch、kibana、filebeat、三个工具完成分布式集群收集 分布在各个ip地址上的微服务日志,这样就可以统一的在一个服务器上查看了所有的微服务产生的日志了,避免了一个个通过工具远程linux服务器去查看日志,极大提高了日志查看分析的效率了。当时目前我只是完成收集和查看所有日志,那么时间一长我们就会遇到...