1.7.1: 创建索引

  1. /**
  2. * 创建索引
  3. * */
  4. @Test
  5. public void createIndex(){
  6. // 创建索引
  7. CreateIndexResponse blog2 = client.admin().indices().prepareCreate("blog2").get();
  8. System.out.println(blog2.toString());
  9.  
  10. }

默认创建好索引,mappings为空

1.7.2: 删除索引

  1. /**
  2. * 删除索引
  3. * */
  4. @Test
  5. public void deleteIndex(){
  6. // 删除索引
  7. client.admin().indices().prepareDelete("blog2").get();
  8. }

1.7.3:索引的映射操作

为什么要进行手动的映射?

  1. 在实际生产中经常会出现精度损失的现象,往往就是因为没有进行正确的索引映射或者压根就没进行索引映射
    Elasticsearch最开始索引文档A,其中的一个字段是一个数字,是整数;通过自动类型猜测,并设置类型为整型(integer)或者长整型;
    然后在索引另一个文档BB文档在同一个字段中存储的是浮点型;那么这个时候elasticsearch就会把B文档中的小数删除,保留整数部分;
    这样就会导致数据的不准确!

如果你习惯SQL数据库,或许知道,在存入数据前,需要创建模式来描述数据(schmal);尽管elasticsearch是一个无模式的搜索引擎,可以即时算出数据结构;

但是我们仍然认为由自己控制并定义结构是更好的;而且在实际的生产中,我们也是自己创建映射;

注意:注意创建mapping的时候,索引必须提前存在

  1. {
  2. "settings":{
  3. "nshards":3,
  4. "number_of_repli umber_of_cas":1
  5. },
  6. "mappings":{
  7. "dahan":{
  8. "dynamic":"strict",
  9. "properties":{
  10. "studentNo":{"type": "string", "store": true},
  11. "name":{"type": "string","store": true,"index" : "analyzed","analyzer": "ik_max_word"},
  12. "male":{"type": "string","store": true},
  13. "age":{"type": "integer","store": true},
  14. "birthday":{"type": "string","store": true},
  15. "classNo":{"type": "string","store": true},
  16. "address":{"type": "string","store": true,"index" : "analyzed","analyzer": "ik_max_word"},
  17. "isLeader": {"type": "boolean", "index": "not_analyzed"}
  18. }
  19. }
  20. }

1):创建索引

  1. /**
    * 创建索引
    * */
    @Test
    public void createIndex(){
       
       CreateIndexResponse blog2 = client.admin().indices().prepareCreate("sanguo").get();
       System.out.println(blog2.toString());

    }

2):通过代码创建索引配置信息(有错的情况)

  1. /**
    * Created by angel;
    */
    public class CreateMappings {
       public static void main(String[] args) throws UnknownHostException {
           TransportClient client = null;
           Map<String, Integer> map = new HashMap<String, Integer>();
           map.put("number_of_shards", 3);
           map.put("number_of_replicas", 1);
           Settings settings = Settings.builder()
                  .put("cluster.name", "cluster")
                  .build();
           client = new PreBuiltTransportClient(settings)
                  .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("hadoop01"), 9300));
           System.out.println("========连接成功=============");


           XContentBuilder builder = null;
           try {
               builder = jsonBuilder()
                      .startObject()
                      .startObject("dahan").field("dynamic", "true")
                      .startObject("properties")
                      .startObject("studentNo").field("type", "string").field("store", "yes").endObject()
                      .startObject("name").field("type", "string").field("store", "yes").field("analyzer", "ik_max_word").endObject()//.field("analyzer", "ik")
                      .startObject("male").field("type", "string").field("store", "yes").endObject()//.field("analyzer", "ik")
                      .startObject("age").field("type", "integer").field("store", "yes").endObject()
                      .startObject("birthday").field("type", "string").field("store", "yes").endObject()
                      .startObject("classNo").field("type", "string").field("store", "yes").endObject()
                      .startObject("address").field("type", "string").field("store", "yes").field("analyzer", "ik_max_word").endObject()
                      .startObject("isLeader").field("type", "boolean").field("store", "yes").field("index", "not_analyzed").endObject()
                      .endObject()
                      .endObject()
                      .endObject();
               PutMappingRequest mapping = Requests.putMappingRequest("sanguo")
                      .type("dahan")
                      .source(builder);
               UpdateSettingsRequest updateSettingsRequest = new UpdateSettingsRequest();
               updateSettingsRequest.settings(map);
               client.admin().indices().updateSettings(updateSettingsRequest).actionGet();
               client.admin().indices().putMapping(mapping).get();
          } catch (Exception e) {
               e.printStackTrace();
          }
      }
    }

如果有同学学习的比较扎实,那么会记住以下内容:

当索引不存在的时候,可以指定副本数和分片数

当索引存在的时候,只能指定副本数

所以,我们在构建索引的时候就要指定确定的分片和副本:

1):创建索引的时候直接指定索引的shard数和副本数

  1. /**
    * 创建索引
    * */
    @Test
    public void createIndex(){
       // 创建索引
       Map<String, Integer> map = new HashMap<String, Integer>();
       map.put("number_of_shards", 3);
       map.put("number_of_replicas", 1);
       CreateIndexResponse blog2 = client.admin().indices().prepareCreate("sanguo").setSettings(map).get();
       System.out.println(blog2.toString());

    }

2):然后在创建映射信息的时候,就可以忽略掉分片数和副本数了。直接进行索引的映射:

  1. /**
    * Created by angel;
    */
    public class CreateMappings {
       public static void main(String[] args) throws UnknownHostException {
           TransportClient client = null;
           Settings settings = Settings.builder()
                  .put("cluster.name", "cluster")
                  .build();
           client = new PreBuiltTransportClient(settings)
                  .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("hadoop01"), 9300));
           System.out.println("========连接成功=============");


           XContentBuilder builder = null;
           try {
               builder = jsonBuilder()
                      .startObject()
                      .startObject("dahan").field("dynamic", "true")
                      .startObject("properties")
                      .startObject("studentNo").field("type", "string").field("store", "yes").endObject()
                      .startObject("name").field("type", "string").field("store", "yes").field("analyzer", "ik_max_word").endObject()//.field("analyzer", "ik")
                      .startObject("male").field("type", "string").field("store", "yes").endObject()//.field("analyzer", "ik")
                      .startObject("age").field("type", "integer").field("store", "yes").endObject()
                      .startObject("birthday").field("type", "string").field("store", "yes").endObject()
                      .startObject("classNo").field("type", "string").field("store", "yes").endObject()
                      .startObject("address").field("type", "string").field("store", "yes").field("analyzer", "ik_max_word").endObject()
                      .startObject("isLeader").field("type", "boolean").field("store", "yes").field("index", "not_analyzed").endObject()
                      .endObject()
                      .endObject()
                      .endObject();
               PutMappingRequest mapping = Requests.putMappingRequest("sanguo")
                      .type("dahan")
                      .source(builder);
               client.admin().indices().putMapping(mapping).get();
          } catch (Exception e) {
               e.printStackTrace();
          }
      }
    }

es之java索引操作的更多相关文章

  1. ES入门三部曲:索引操作,映射操作,文档操作

    ES入门三部曲:索引操作,映射操作,文档操作 一.索引操作 1.创建索引库 #语法 PUT /索引名称 { "settings": { "属性名": " ...

  2. 008-elasticsearch5.4.3【二】ES使用、ES客户端、索引操作【增加、删除】、文档操作【crud】

    一.ES使用,以及客户端 1.pom引用 <dependency> <groupId>org.elasticsearch.client</groupId> < ...

  3. es之java分页操作

    按照一般的查询流程来说,如果我想查询前10条数据: · 1 客户端请求发给某个节点 · 2 节点转发给个个分片,查询每个分片上的前10条 · 3 结果返回给节点,整合数据,提取前10条 · 4 返回给 ...

  4. elasticsearch java 索引操作

    1.添加maven依赖 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>el ...

  5. ElasticSearch 获取es信息以及索引操作

    检查集群的健康情况 GET /_cat/health?v green:每个索引的primary shard和replica shard都是active状态的yellow:每个索引的primary sh ...

  6. Elasticsearch必知必会的干货知识二:ES索引操作技巧

    该系列上一篇文章<Elasticsearch必知必会的干货知识一:ES索引文档的CRUD> 讲了如何进行index的增删改查,本篇则侧重讲解说明如何对index进行创建.更改.迁移.查询配 ...

  7. ElasticSearch+Kibana 索引操作

    ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...

  8. ES系列十五、ES常用Java Client API

    一.简介 1.先看ES的架构图 二.ES支持的客户端连接方式 1.REST API http请求,例如,浏览器请求get方法:利用Postman等工具发起REST请求:java 发起httpClien ...

  9. 【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作 完整版+kibana管理ES的index操作

    spring boot 2.X集成ES 进行CRUD操作  完整版 内容包括: ============================================================ ...

随机推荐

  1. Android怎么改图标都不生效&&Android studio 如何修改APP图标和名字

    去这里(我自己写的),解决方法包你满意: https://blog.csdn.net/qq_43141611/article/details/101875545

  2. 线性表源码分享(c++),包含顺序表、单链表、循环链表、双向链表

    ---恢复内容开始--- 我是一个c++和数据结构的初学者,本文主要是把清华大学出版社的数据结构(用面向对象方法与c++语言描述)(第2版)这本书中第二章线性表的源码抄下来,在学习的过程中有助于加深印 ...

  3. 使用CSDN-markdown编辑器粘贴代码块时崩溃问题解决

    原因:代码段换行符失效,所有代码一行显示 解决方法:使用Chrome浏览器即可解决(使用Microsoft Edge会出现此问题) 效果展示: # _*_ coding:utf-8 _*_ impor ...

  4. 管道(Pipe)----计算机进程间通信

    参至他人博客:https://blog.csdn.net/u011583316/article/details/83419805

  5. 洛谷 - P1346 - 电车 - Dijkstra/01BFS

    https://www.luogu.org/problem/P1346 使用最短路之前居然忘记清空了. #include<bits/stdc++.h> using namespace st ...

  6. Python 中的Lock与RLock

    摘要 由于多线程共享进程的资源和地址空间,因此,在对这些公共资源进行操作时,为了防止这些公共资源出现异常的结果,必须考虑线程的同步和互斥问题. 为什么加锁:1.用于非线程安全, 2.控制一段代码,确保 ...

  7. Python 操作sqlite数据库及保存查询numpy类型数据(二)

    # -*- coding: utf-8 -*- ''' Created on 2019年3月6日 @author: Administrator ''' import sqlite3 import nu ...

  8. 安装sysbench,报错"Could not resolve 'ports.ubuntu.com'"

    在ubuntu系统中安装sysbench时报错“Could not resolve 'ports.ubuntu.com'”怎么办呢? 安装时报错: 亲测可用的方法: 修改 resolv.conf 文件 ...

  9. Ubuntu 16.04安装N卡驱动、cuda、cudnn和tensorflow GPU版

    安装驱动 最开始在英伟达官网下载了官方驱动,安装之后无法登录系统,在登录界面反复循环,用cuda里的驱动也出现了同样的问题.最后解决办法是把驱动卸载之后,通过命令行在线安装驱动. 卸载驱动: sudo ...

  10. 025-Cinder服务-->安装并配置一个本地存储节点(ISCSI)

    一:Cinder提供块级别的存储服务,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷.此服务也会激活管理卷的快照和卷类型的功能,块存储服务通常包含下列组件:cin ...