elasticsearch的rest风格API

使用postman发送rest风格请求,(还是kibana的工具好用啊。。)

 

java可以使用resttemplate发送请求,不过elasticsearch提供了自己的客户端。

elasticsearch基本概念以及和mysql对应关系:

elasticsearch                        mysql

索引库 (indices)            数据库(database)

类型(type)                     表(table)

文档(document)           行(row)

字段(field)                     列(columns)

 

其他:集群中的概念

索引集:逻辑上完整的索引

分片:数据拆分后的各个部分

副本:每个分片的复制

elasticsearch本身就是分布式的,即使只有一个节点,他也会对数据进行分片和副本的操作,当向集群中添加数据时,数据也会在新加入的节点进行平衡

 

 

API

创建索引库:

语法:elasticsearch采用restful风格API。所以一次http请求就是api,可以使用任何工具发起http请求

创建索引的请求方式:

  • 请求方式:PUT
  • 请求路径:/索引库名(随便取,就是创建的索引库名字)
  • 请求参数:json格式      

{

     "settings":{                                索引库设置

                "number_of_shards":3 ,   分片数量

                 "number_of_replicas":2  副本数量

                      }

}

单台机器也能弄出对应数量的分片和副本,拓展了集群后,它会自动把分片弄到新的机器上

 

使用kibana的工具的话直接写

PUT /索引库名字

{

     "settings":{

  "number_of_shards":3 ,   分片数量

  "number_of_replicas":2     副本数量

                    }

}

查看索引库

GET  /索引库名称

删除索引库

DELETE  /索引库名称

创建类型(类似表)

PUT /索引库名称/_mapping/类型名称

{
    "properties":{
        "字段名称":{
            "type":"类型",
            "index":true,     是否索引,默认true
            "store":true,      是否存储,默认false
            "analyzer":"分词器"
        }
    }
}

例子:注意不能又空白行

PUT /hello/_mapping/goods
{
    "properties":{
        "title":{
            "type":"text",
            "analyzer":"ik_max_word"
        },
        "image":{
            "type":"keyword",
            "index":false
        },
        "price":{
            "type":"float"
        }
    }
}

也可以创建索引库的同时创建类型

PUT /cars 索引库名称
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "transactions":{         类型名称
      "properties": {      字段
         "color":{
        "type":"keyword"
      },
      "make":{
        "type":"keyword"
      }
      }
    }
  }
}

 

查询类型(表)

GET /hello/_mapping/goods   查询goods类型

GET /hello/_mapping    查询所有类型

字段类型

elasticseaarch又十分丰富的字段类型:

string类型:

  1. text   可分词
  2. keyword   不可分词

数字类型:

  1. long
  2. interger
  3. short
  4. byte
  5. double
  6. float
  7. half_float
  8. scaled_float   高精度浮点数,需要指定一个精度因子,比如10  或者100,elasticsearch会把真实值乘以这个因子,取出时在还原

日期类型:

  1. date    elasticsearch可以将时间日期格式化为字符串存储,但是建议存毫秒值,long类型,节省空间

布尔类型:

  1. boolean

二进制类型:

  1. binary

范围类型:

  1. interger_range,float_range,long_range,double_range,date_range

 

复杂类型:

1.数组类型:

 

2.对象类型:

比如{girl:{name:"haha",age:18}}

他会处理为girl.name和girl.age

3.

index:是否索引

true:索引(默认)

false:不索引

默认是索引的,所以有些字段不希望索引就需要手动设置为false,比如图片的地址

store:是否存储

true:存储

false:不存储(默认)

在lucene和aolr中,如果store为false,那么文档列表中姐没有这个字段的值,用户搜索结果中不会显示出来

但是ecasticsearch中,即使store为false也可以搜索到结果。原因是el在创建索引时会将文档中的原始数据备份,保存到_source的属性中,而且我们可以通过_source来选择那些显示那些不显示

而如果设置为true,就会在——source以外额外存储一份数据,多余,因此一般都设置为false。

boost及其他。。。看文档去吧

 

下面介绍根据id进行增删该查

新增数据

语法:

POST  /索引库名称/类型名称

{
    "key":"value"
}

例子

POST /hello/goods
{
  "image":"sadafsfsdfsd",
  "price":996,
  "title":"小米手机"
}

新增成功可以看到返回一个id

我们可以在路径后指定id:例子

 

查询数据

查询所有:

      索引名称

GET /hello/_search
{
  "query": {"match_all": {}}
}

 根据id查询

   索引名称/类型名称

GET /hello/goods/12

 

新增时候可以直接新增不存在的字段,es会自己帮助我们添加字段,字符串类型es无法判断,他就会创建俩个字段一个test一个keyword类型

动态映射

修改

PUT 索引库/类型/id

{

修改的内容

}

如果不存在对应id的数据,就会新增一条

 删除数据

DELETE 索引库/类型/id  根据id删除

 

 

高级查询,下一篇

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值