ElasticSearch(一)
1.安装 部署 启动
单机节点的:
要求 jdk至少1.7
上传服务器 tar -xvf 解压 cd到bin目录 elasticsearch启动
默认的http访问端口9200 传输协议端口9300
访问web端 出现 这个即启动成功:
{
"status" : 200, //返回状态
"name" : "Midgard Serpent", //随机名字
"cluster_name" : "elasticsearch", //集群名字 当前是单节点
"version" : { //版本号
"number" : "1.4.4",
"build_hash" : "c88f77ffc81301dfa9dfd81ca2232f09588bd512",
"build_timestamp" : "2015-02-19T13:05:36Z", //创建时间
"build_snapshot" : false,
"lucene_version" : "4.10.3" //lucene版本
},
"tagline" : "You Know, for Search"//tag提示
}
2.简单介绍
关系型数据库 有:database数据库->table表->row行->column列
ElasticSearch是: index索引库->type类型-doucument文本(对象)->field字段
3.具体操作
ElasticSearch是rest风格的
当前先用curl 命令来操作 之后用java api再介绍 curl大家都不陌生吧 模拟http操作 有 -GET -XPUT -XPOST -XDELETE 等操作 当然 -d 是传参数 post类似于新增 put类似于更新 put必须给定具体的资源
1.创建一个索引库
curl -XPUT 'http://主机:9200/索引库名字' //put和post都可以
2.创建一个索引
curl -XPOST 'http://主机:9200/索引库名字/type名字/给定一个id' -d {"name":"hr","age":28} //json类型的参数
3.查询索引
//查询某一个
curl -XGET 'http://主机:9200/索引库名字/type名字/查询的id?pretty' //拼接pretty 为了json格式好看
//查询所有索引 默认前10条
curl -XGET 'http://主机:9200/_search?pretty' //可以跟索引库 和type
Json格式是这样的:
{
"_index" : "hrdatabase",
"_type" : "emp",
"_id" : "1",
"_score" : 1.0,
"_source":{"name":"hr","age":14}
}
想查某一项 用rest 拼在后面 比如source 查询的id/_source或者再精确点id?_source=name
根据条件查询 后面拼接?q(query)=键值对(用冒号)
主机:9200/_search?q=name:hr
还可以通过DSL查询 跟-d
主机:9200/_search?q=name:hr -d '{"query":{"match":{"name":"hr"}}}'
即:
curl -XGET 'http://localhost:9200/_search?pretty' -d '{"query":{"match":{"name":"hr"}}}'
多个查询 _mget json格式固定
curl -XGET 'http://localhost:9200/_mget' -d '{"docs":[{"_index":"hrdatabase","_type":"emp","_id":1}]}'
//可以跟多个对象 如果url给定了 index type则不用写
//还可以跟_source:查询的字段
//还可以只查id
curl -XGET http://localhost:9200/索引库/emp/_mget?pretty -d '{"ids":["1","2"]}'
4.索引更新
更新会修改版本号
整条数据更新:用原先的XPUT XPOST 会先将原id数据标记为删除状态 此时再也查不到原先的数据 es会在添加新数据的时候自动删除
局部更新:必须用post _update 给定-d
id/_update -d '{"doc":{"name":"hrr","city":"bj"}}'
5.删除索引
-XDELET 操作 根据id可以删除
根据查询条件的删除: -XDELETE _query ?q=
curl -XDELETE 'localhost:9200/hrdatabase/emp/_query?q=name:fff'
DSL删除 -d参数
curl -XDELETE 'http://localhost:9200/hrdatabase/emp/_query' -d '{
"query" : {
"term" : { "name" : "fff" }
}
}'
删除多个索引库 多个type 后面跟, hrdatabase,hrdatabase2
删除所有_all
6.批量操作 bulk
我踩的一个坑就是 json 两边的 ” 最后一个’ 必须放在回车后面
不然 只能执行第一条
curl -XPOST 'http://localhost:9200/_bulk' -d '{"index":{"_index":"hrdatabase","_type":"emp","_id":11}}
{"name":"zs","age":36}
'
放在一个文件中
--data-binary @文件名
7.更新的时候 是乐观锁更新
有一个版本号 version
_update?version=当前版本号 才能更新成功
外部版本号
_update?version_type=external&version=比当前版本号大就行 且会修改版本号
8.查看集群的状态
http://192.168.80.88:9200/_cluster/health?pretty
9.索引库的分片
默认是5个分片 一个副本
可以在创建索引库的时候就指定分片数
如果已经创建索引库 则不能修改分片数
创建时指定分片数量:
curl -XPOST 'http://localhost:9200/索引库名称' -d '{"settings":{"number_of_shards":3}}' //分成3片