Elasticsearch系列(二)----Elasticsearch 基本使用
Elasticsearch提供了Restful API,使用json格式,这使得它非常利于与外部交互,Restful的接口很简单,一个url表示一个特定的资源,譬如/blog/article/1,就表示一个index为blog,type为aritcle,id为1的document。
而我们使用http标准method来操作这些资源,POST新增,PUT更新,GET获取,DELETE删除,HEAD判断是否存在。
curl -X<VERB> '<PROTOCOL>://<HOST>/<PATH>?<QUERY_STRING>' -d '<BODY>'
VERB HTTP方法:GET(获取), POST(更新), PUT(创建), HEAD, DELETE(删除)
PROTOCOL: http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
HOST: Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
PORT: Elasticsearch HTTP服务所在的端口,默认为9200
QUERY_STRING: 一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据
BODY: 一个JSON格式的请求主体(如果请求需要的话)
二、基础操作
create:写 document 到 Elasticsearch 中,与 index 不同的是,如果存在,就抛出异常DocumentAlreadyExistException。
get:根据ID取出document。
update:如果是更新整个 document,可用index 操作。如果是部分更新,用update操作。在Elasticsearch中,更新document时,是把旧数据取出来,然后改写要更新的部分,删除旧document,创建新document,而不是在原document上做修改。
delete:删除document。Elasticsearch 会标记删除document,然后,在Lucene 底层进行merge时,会删除标记删除的document。
三、Filter 与 Query
DSL 由一些子查询组成,这些子查询可应用于两类查询,分别是filter 和 query。
filter 正如其字面意思“过滤”所说的,是起过滤的作用,任何一个document 对 filter 来说,就是match 与否的问题,是个二值问题,0和1,没有scoring的过程。
使用query的时候,是表示match 程度问题,有scroing 过程。
另外,Filter 和 Query 还有性能上的差异,Elasticsearch 底层对Filter做了很多优化,会对过滤结果进行缓存;同时,Filter 没有相关性计算过程,所以,Filter 比 Query 快。
所以,官网推荐,作为一条比较通用的规则,仅在全文检索时使用Query,其它时候都用Filter。但是,根据我们的使用情况来看,在过滤条件不是很强的情况下,缓存可能会占用较多内存,如果这些数据不是频繁使用,用空间换时间不一定划算。
四、API 惯例、规则
1、大多数API都支持index参数,它的值可以是test1,test2,test3 这种形式,也可以使用通配符test*,*test,te*st等,如果是_all那就是作用于所有index,也支持使用+\-号(+test*,-test3),当然,一些作用对象是单个索引的API就不支持这个特性了。
2、Date math support in index name (索引名称的日期数学运算)
格式:<static_name{date_math_expr{date_format|time_zone}}>
所有表达式必须是经过URIEncode编码的。 GET /<logstash-{now/d}>/_search 请求必须写成 GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search。
假如当前日期是2020年5月20日中午12:30 ,Date math表达式为<logstash-{now/d}>,那当前日期将被解析为:logstash-2024.03.22。
以下是官网给出的例子:
<logstash-{now/d}> logstash-2024.03.22
<logstash-{now/M}> logstash-2024.03.01
<logstash-{now/M{YYYY.MM}}> logstash-2024.03
<logstash-{now/M-1M{YYYY.MM}}> logstash-2024.02
<logstash-{now/d{YYYY.MM.dd|+12:00}}> logstash-2024.03.23
注意最后一个的写法:+12h 加上12小时
3、 通用的可选参数
1)pretty=true/false 返回结果数据是否以漂亮的格式展示
2)human=true/false 返回结果数据是否以人类易读形式显示
3)Date math 操作 +1h +1M(月份) +1m(分钟) +1y 等等
4)返回结果过滤 GET /_search?q=elasticsearch&filter_path=took,hits.hits._id,hits.hits._score ,返回的格式如下:
{
"took": 3,
"hits": {
"hits": [
{
"_id": "0",
"_score": 1.6375021
}
]
}
}
5)flat_settings 是否以扁平方式显示 =true 和 =false的返回结果分别是:
true->{
"twitter": {
"settings": {
"index.number_of_replicas": "1",
"index.number_of_shards": "1",
"index.creation_date": "1474389951325",
"index.uuid": "n6gzFZTgS664GUfx0Xrpjw",
"index.version.created": ...,
"index.provided_name": "twitter"
}
}
}
false->{
"twitter": {
"settings": {
"index": {
"number_of_replicas": "1",
"number_of_shards": "1",
"creation_date": "1474389951325",
"uuid": "n6gzFZTgS664GUfx0Xrpjw",
"version": {
"created": ...
},
"provided_name": "twitter"
}
}
}
}
6) 还有一些其他的error_trace等可选参数
4、基于URL的访问控制 URL-based access control
下一篇: 【Elasticsearch】增删改查
推荐阅读
-
ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程
-
Elasticsearch.Net使用教程 MVC4图书管理系统(2)
-
使用Python操作Elasticsearch数据索引的教程
-
使用ElasticSearch6.0快速实现全文搜索功能的示例代码
-
HBase 系列(六)——HBase Java API 的基本使用
-
C# Redis学习系列(二)Redis基本设置
-
Java中使用elasticsearch搜索引擎实现简单、修改等操作
-
ES 19 - Elasticsearch的检索语法(_search API的使用)
-
使用docker快速部署Elasticsearch集群的方法
-
Java集合系列(二):ArrayList、LinkedList、Vector的使用方法及区别