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


    setting

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

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

    curl -XGET http://192.168.79.131:9200/shb01/_settings?pretty

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


    2:修改

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

    curl -XPUT http://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。通过mappings可以指定数据类型是否存储等属性。

    1:查看mapping信息

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

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




    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

    [java] view plain copy
    1. /** 
    2.      * settings,mappings 
    3.      * @throws IOException  
    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.     public void testSettingsMappings() throws IOException  
    11.     {  
    12.         //1:settings  
    13.         HashMap<String, Object> settings_map = new HashMap<String, Object>(2);  
    14.         settings_map.put("number_of_shards"3);  
    15.         settings_map.put("number_of_replicas"1);  
    16.           
    17.         //2:mappings  
    18.         XContentBuilder builder = XContentFactory.jsonBuilder()  
    19.                 .startObject()  
    20.                     .field("dynamic""stu")  
    21.                     .startObject("properties")  
    22.                         .startObject("id")  
    23.                             .field("type""integer")  
    24.                             .field("store""yes")  
    25.                         .endObject()  
    26.                         .startObject("name")  
    27.                             .field("type""string")  
    28.                             .field("store""yes")  
    29.                             .field("index""analyzed")  
    30.                             .field("analyzer""id")  
    31.                         .endObject()  
    32.                     .endObject()  
    33.                 .endObject();  
    34.           
    35.         CreateIndexRequestBuilder prepareCreate = transportClient.admin().indices().prepareCreate("shb01");  
    36.         prepareCreate.setSettings(settings_map).addMapping("stu", builder).execute().actionGet();  
    37.     }         

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


    分片查询

    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可先备份此目录

    [java] view plain copy
    1. /** 
    2.      * 指定分片 查询 
    3.      */  
    4.     @Test  
    5.     public void testPreference()  
    6.     {  
    7.         SearchResponse searchResponse = 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.           
    17.         SearchHits hits = searchResponse.getHits();  
    18.         System.out.println(hits.getTotalHits());  
    19.         SearchHit[] hits2 = hits.getHits();  
    20.         for(SearchHit h : hits2)  
    21.         {  
    22.             System.out.println(h.getSourceAsString());  
    23.         }  
    24.     } 
  • 相关阅读:
    【转帖】如何学好 C 语言
    设计模式:单件模式(Singleton Pattern)
    如果软件正在占领全世界.为什么程序员得不到任何尊重?
    【转】程序员技术练级攻略
    JS闭包理解的彻底吗?
    设计模式:原型模式(Prototype Pattern)
    关于基础类型
    IIS5和IIS6的Asp.net应用程序生命周期事件和Global.asax文件
    App_Code文件夹和Bin文件夹
    构造函数
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7452005.html
Copyright © 2020-2023  润新知