Elasticsearch学习总结二 elasticSearch一些基本用法

Stella981
• 阅读 370

一 . elasticSearch提供了一些基本的rest命令,基本如下:

  •       /index/_search    搜索指定索引下的数据,http://ip:9200/index/_search 查询当前索引下的数据
        
    
  •       /index/                 查看指定索引的详细信息
        
    
  •       /index/type/          创建或操作类型
        
    
  •       /index/_mapping    创建或操作mapping
        
    
  •       /index/_settings      创建或操作设置(number_of_shards是不可更改的)
        
      使用rest命令的时候一般都是配合着curl命令一起使用,例如
      
    
  • curl -x 指定http请求的方法 HEAD GET POST PUT DELETE

  •        -d   指定要传输的数据
        
    
  • 创建索引的时候可以使用如下命令

  •           curl -XPUT 'http://localhost:9200/index_name/'
        
    
  •           当然使用PUT/POST都可以,创建索引带有数据使用如下命令
        
    

    curl -XPOST http://localhost:9200/test/employee/1 -d '{ "first_name" : "John", "last_name" : "Smith", "age" : 25, "about" : "I love to go rock climbing", "interests": [ "sports", "music" ] }'

二. 虽然可以使用rest命令可以灵活操作es,但是真正平时开发肯定是用Java或者python了,下面看下JavaApi如何操作es.

首先构建客户端

Client client = TransportClient.builder().build()
                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

因为这些操作基本可以封装为一个工具类,所以对创建客户端做了一层封装。

   EsSearchManager esSearchManager = EsSearchManager.getInstance();
   esSearchManager.buildIndex("testIndex","testType");

在EsSearchManger构建实例的时候创建了ecClient,通过单例模式保证对象的唯一。

private EsSearchManager(){
        getClient();
}
public static EsSearchManager getInstance(){
        if(null == esSearchManager ){
            synchronized (EsSearchManager.class){
                esSearchManager = new EsSearchManager();
            }
        }
        return  esSearchManager;
    }

getClient()封装了创建client的细节不在赘述,下面是构建索引的代码,部分配置封装到了配置文件中,放置硬编码造成的修改麻烦,下面这个方法只是构建了索引,当然可以指定mapping设置,只是封装到了另一个方法中。

public Boolean buildIndex(String indexName) throws Exception {
        IndicesExistsResponse response = getClient().admin().indices()
                .prepareExists(indexName).execute().actionGet();
        Boolean flag = true;
        ResourceBundle rb = ResourceBundle.getBundle("commons");
        String replicas = rb.getString("replicas");
        String shards = rb.getString("shards");
        String refreshInterval = rb.getString("refreshInterval");
        if (!response.isExists()) { //需要将配置放置到配置文件中
            Settings settings = Settings.settingsBuilder()
                    .put("number_of_replicas", Integer.parseInt(replicas))
                    .put("number_of_shards", Integer.parseInt(shards))
                    .put("index.translog.flush_threshold_ops", 10000000)
                    .put("refresh_interval", refreshInterval)
                    .put("index.codec", "best_compression").build();
            CreateIndexResponse createIndxeResponse = getClient().admin().indices()
                    .prepareCreate(indexName).setSettings(settings).execute()
                    .actionGet();
            flag = createIndxeResponse.isAcknowledged();
            LOG.info("返回值" + flag);
        }
        return flag;
    }

至此索引创建完毕,通过head插件可以迅速查看到,详细的代码已将上传至github中,地址如下 https://github.com/winstonelei/BigDataTools

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
2年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这