http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
https://www.cnblogs.com/zklidd/p/6114302.html
在操作时的区别如下:
POST /uri 创建
DELETE /uri/xxx 删除
PUT /uri/xxx 更新或创建
GET /uri/xxx 查看
POST不用加具体的id,它是作用在一个集合资源之上的(/uri),而PUT操作是作用在一个具体资源之上的(/uri/xxx)。
在ES中,如果不确定document的ID(documents具体含义见下),那么直接POST对应uri( “POST /website/blog” ),ES可以自己生成不会发生碰撞的UUID;
如果确定document的ID,比如 “PUT /website/blog/123”,那么执行创建或修改(修改时_version版本号提高1)
ES与DB的层级关系类比
ES:indices --> types --> documents --> fields
DB:databases --> tables --> rows --> columns
ps:types以后会逐渐废除,不建议太关注
在幂等性的区别如下:
PUT、GET、DELETE是幂等的,由于同一条这样的指令,执行多次结果都一样。比如 PUT /uri/xxx 多次,那么结果和这条指令执行一次效果一样。
而POST是非幂等的,执行多次更改多次服务器状态。比如POST /uri 多次,那么生成多个UUID的document,执行多次效果当然和执行一次不一样了
启动之后,执行下面命令,运行正常,会有相应提示
curl localhost:9200
1、创建表(注意表名只能小写,大写创建失败)
curl -X PUT 'localhost:9200/horsetest'
2、查看所有表
curl -X GET 'localhost:9200/_cat/indices?v'
3、删除表
curl -X DELETE 'localhost:9200/horsetest'
4、检测集群是否健康
curl 'localhost:9200/_cat/health?v'
由于我的云内存空间较少,所有是yellow,如果是正常状态,应该为green
5、单条数据插入(POST、PUT)
curl -H "Content-Type:application/json" -X PUT 'localhost:9200/horsetest/abc/1' -d '
{
"user": "小明",
"title": "开发工程师",
"desc": "开发淘宝京东"
}'
PUT必须使用id,不然失败,因为是新增。POST可以不用id
curl -H "Content-Type:application/json" -X POST 'localhost:9200/horsetest/abc' -d '
{
"user": "小黑",
"title": "测试工程师",
"desc": "测试淘宝京东"
}'
如果POST使用id,则会对已经插入数据进行修改,更新相同字段值,其他数据不会变,新提交的字段如果不存在,则增加
两次操作后结果如下
curl -H "Content-Type:application/json" -X POST 'localhost:9200/horsetest/abc/1' -d '
{
"user": "小黑post",
"title": "测试工程师",
"desc": "测试淘宝京东",
"addStr": "psot新增"
}'
6、查询
curl 'localhost:9200/horsetest/abc/1?pretty=true'
7、删除
curl -X DELETE 'localhost:9200/horsetest/abc/2'
8、更新curl -H "Content-Type:application/json" -X PUT 'localhost:9200/horsetest/abc/2' -d '
{
"user": "小明222333",
"title": "开发工程师2222333",
"desc": "开发淘宝京东22223333"
}'
对原有数据改变,发现id没变,version从1变为2,result从created变为updated
9、查询所有记录
curl 'localhost:9200/horsetest/_search'
types字段可以不写,但当后面有限制条件是,需要加上"Content-Type:application/json",size可以调整一次显示记录数,默认为10条
took:表示操作总耗时(单位毫秒)
time_out:表示是否超时
hits:表示命中的记录,hits内字段含义如下:
total:返回总条数
max_score:最高匹配度
hits:返回的记录组成的数组
返回的每条记录里面都有_source字段,表示匹配程度,默认按照这个字段降序排列
10、全文检索
curl -H "Content-Type:application/json" 'localhost:9200/horsetest/abc/_search' -d '
{
"query": {"match":{"desc":"开发"}}
}'
使用match查询,指定匹配条件为desc字段包含“开发”这个词,结果如下:
使用match查询,指定匹配条件为desc字段包含“开发”这个词
查询默认是一次返回10条记录,可以用size调整返回条数
curl -H "Content-Type:application/json" 'localhost:9200/horsetest/abc/_search' -d '
{
"query": {"match":{"desc":"开发"}},
"size":20
}'
from表示位移,下面代码表示从位置3开始,返回5条结果
curl -H "Content-Type:application/json" 'localhost:9200/horsetest/abc/_search' -d '
{
"query": {"match":{"desc":"开发"}},
"from":3
"size":5
}'
11、逻辑运算
如果有多个搜索关键字,elastic认为他们是OR关系
下面“开发”、“工程师”都是关键字
curl -H "Content-Type:application/json" 'localhost:9200/horsetest/abc/_search' -d '
{
"query": {"match":{"desc":"开发 工程师"}},
"from":3,
"size":5
}'
如果要执行多个关键字的and搜索,必须使用布尔查询
curl -H "Content-Type:application/json" 'localhost:9200/horsetest/abc/_search' -d '
{
"query":{
"bool":{
"must":[
{"match":{"desc":"开发"}},
{"match":{"desc":"京东"}}
]
}
}
}'