我理解的elasticsearch(二)
上一节我们讲到数据类型,elasticsearch的数据类型和其他编程语言的数据类型一样,都是提供一个值的范围和一些操作。数据类型有字符串,数值,日期,数组,多字段。
搜索文档:
⑴返回源文档的某些字段
curl -XGET 'localhost:9200/get-together/group/1?pretty&fields=name'
⑵索引所有字段
curl 'localhost:9200/get-together/group/_search?q=elasticsearch'
系统默认情况下将会在_all上搜索,如果总在特定的字段上进行搜索,可以通过设置enabled为false来关闭_all,这样会使索引的范围变小
curl -XPUT 'localhost:9200/get-together/_mapping/custom-all' -d ' {
"custom-all" : {
"properties" : {
"organizer" : {
"type" : "string",
"include_in_all" : false
} } } }'
通过ID为lst的文档
curl -XPUT 'localhost:9200/get-together/manual_id/1st?pretty' -d ' {
"name" : "elasticsearch"
}'
生成ID,使用HTTP Post请求并省去ID:
curl -XPOST 'localhost:9200/logs/quto_id/?pretty' -d ' {
"message" : "i hava an automatic id " }'
更新文档
⑴通过发送部分文档,增加或替换现有文档的一部分
curl -XPOST 'localhost:9200/get-together/group/2/_update' -d '{
"doc" : {
"organizer" : "roy"
}
}
⑵如果文档那个之前不存在,则发送部分文档或者脚本时,确定文档是否被创建,使用upsert来创建尚不存在的文档
curl -XPOST 'localhost:9200/get-together/group/2/_update' -d '{
"doc" : {
"organizer" : "roy"
},
"upsert" : {
"name" : "elasticsearch",
"organizer" : "roy"
}
}'
⑶发送脚本来更新文档
...
并发控制
对于同一时刻更新同一个文档,有可能产生并发问题,在其他更新获取原有文档并进行修改的时候,有可能另一个更新重新索引了这篇文档,如果没有并发控制,第二次的重新索引将会取消第一次更新所做的修改。elasticsearch支持并发控制,为每一篇文档设置一个版本号。
使用版本号索引文档
curl -XPUT 'localhost:9200/online-shop/shirts/1?version=3' -d ' {
"caption" : " i am a student",
"price" : 5
}'
删除数据
⑴删除单个文档或者一组文档
①通过ID删除单个文档,
curl -XDELETE 'localhost:9200/online-shop/shirts/1'
②在单个请求中删除多个文档
删除整个映射类型,包括映射本身和其中索引的全部文档
curl -XDELETE 'localhost:9200/online-shop/shirts'
查询某个类型的所有文档并删除他们
curl -XDELETE 'localhost:9200/get-together/_query?q=elasticsearch'
⑵删除整个索引
curl -XDELETE 'localhost:9200/get-together/'
⑶关闭索引
关闭索引后,无法通过Elasticsearch来读取和写入其中的数据,直到在次打开它。
curl -XPOST 'localhost:9200/online-shop/_close'
重新开启索引
curl -XPOST 'localhost:9200/online-shop/_open'
深入搜索数据:
elasticsearch接受搜索请求后,将请求发送到所连接的节点,该节点根据要查询的索引,将这个请求一次发送到所有的相关分片,从所有分片收集到足够的排序和排名信息后,只有包含所需文档的分片才会被要求返回相关的内容。
URL中限制搜索的范围:
搜索整个集群
curl 'localhost:9200/_search' -d '...'
搜索指定的索引
curl 'localhost:9200/get-together/_search' -d '...'
搜索全部索引
curl 'localhost:9200/*/_search' -d '...'
curl 'localhost:9200/_all/search' -d '...'
搜索特定索引
curl 'localhost:9200/+get-toge*,-get-together/_search' -d '...'
搜索多个类型
curl 'localhost:9200/together,other/event,group/_search' -d '...'
搜索指定类型
curl ’localhost:9200/together/event/_search' -d '...'
搜索请求中的基本模块,参数:
query:配置了基本评分返回的最佳文档,
size:指定返回文档的数量,
from:用于分页操作,和size一起使用,
_source:指定_source字段如何返回,默认返回完整的_source字段,
sort:默认的排序是基于文档的得分。eg.
使用模块实现分页:
curl 'localhost:9200/get-together/_search?from=3&size=7'
改变结果的顺序:
curl 'localhost:9200/get-together/_search?sort=date:asc'
在回复中限制source的字段
curl 'localhost:9200/get-together/_search?sort=date:asc&_source=title,date'
基于请求主体的搜索:match_all查询会返回被索引和类型中的全部的文档。
curl 'localhost:9200/get-together/_search' -d '{
"query" : {
"match_all" : {}
},
"from" : 10,
"size" : 10
}'
过滤返回的_source内容:
curl 'localhost:9200/get-together/_search' -d '{
"query": {
"match_all" : {}
},
"_source" : ["name","date"]
}'
使用通配符过滤返回的_source内容
curl 'localhost:9200/get-together/_search' -d '{
"query" : {
"match_all" : {}
},
"_source" : {
"include" : ["location.*","date"],
"exclude" : ["location.geolocation"]
}
}'
结果的排序
curl 'localhost:9200/get-together/_search' -d '{
"query" : {
"match_all" : {}
},
"sort" : [
{"created_on" : "asc"},
{"name" : "desc"},
"_score"
]
}'
范围,分页,字段和排序:
curl 'localhost:9200/get-together/group/_search' -d '{
"query" : {
"match_all" : {}
},
"from" : 1,
"size" : 10,
"_source" : ["name","organizer","description"],
"sort" : [{"created_on" : "desc" } ]
}'
term过滤器:
过滤器在评分机制上和搜索性能上与查询不同,过滤器不会为特定的词条计算得分,搜索的过滤器只是为“文档是否匹配这个查询”,返回简单的是或否的答案,因此,过滤器比普通的查询更快,而且还可以缓存。
curl ’localhost:9200/get-together/_search' -d '{
"qeury" : {
"filtered" : {
"query" : {
"match" : {
"title" :"hadoop"
}
},
"filter": {
"term" : {
"host" : "andy"
}
}
}
}
}'
未完待续
参考《Elasticsearch实战》 如果错误,敬请指出,谢谢,共勉