elasticsearch之简单使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nongfuyumin/article/details/79471639

elasticsearch之简单使用

一、elasticsearch基本概念
在Elasticsearch中存储数据的行为就叫做索引(indexing),不过在索引之前,我们需要明确数据应该存储在哪里。
在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中,我们可以画一些简单的对比图来类比传统关系型数据库:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices   -> Types  -> Documents -> Fields
Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
基于HTTP协议,以JSON为数据交互格式的RESTful API
其他所有程序语言都可以使用RESTful API,通过9200端口的与Elasticsearch进行通信,你可以使用你喜欢的WEB客户端,事实上,如你所见,你甚至可以通过 curl 命令与Elasticsearch通信。
向Elasticsearch发出的请求的组成部分与其它普通的HTTP请求是一样的:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
  • VERB HTTP方法:GETPOSTPUTHEADDELETE
  • PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
  • HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
  • PORT Elasticsearch HTTP服务所在的端口,默认为9200
  • PATH API路径(例如_count将返回集群中文档的数量),PATH可以包含多个组件,例如_cluster/stats或者_nodes/stats/jvm
  • QUERY_STRING 一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据
  • BODY 一个JSON格式的请求主体(如果请求需要的话)
二、基本使用
创建、查看索引:
	curl -XPUT '172.17.150.27:9200/megacorp'
	curl '172.17.150.27:9200/_cat/indices?v'
 
 
索引里面添加、查询文档
	curl -XPUT '172.17.150.27:9200/megacorp/employee/1?pretty' -d 
 	 {
   	  "first_name" : "John",
   	 "last_name" :  "Smith",
    	"age" :        25,
   	 "about" :      "I love to go rock climbing",
   	 "interests": [ "sports", "music" ]
  	}'
	
	curl -i -XGET 'http://172.17.150.27:9200/megacorp/employee/1?pretty'    
 
 
    -i参数可以显示Http头部  pretty以美观的格式显示
判断文档是否存在:
	curl -i -XHEAD 'http://172.17.150.27:9200/megacorp/employee/1?pretty'    
删除文档
	curl -i -XDELETE 'http://172.17.150.27:9200/megacorp/employee/1?pretty'

更新
文档,档在Elasticsearch中是不可变的——我们不能修改他们。如果需要更新已存在的文档,可以使用index api重建索引或者替换它
curl -XPUT '172.17.150.27:9200/megacorp/employee/1?pretty' -d 
  {
     "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music,sport" ,]
  }'


可以看到,result值为updated,说明更新了文档,created值为false,-version值加一

这个API 似乎 允许你修改文档的局部,但事实上Elasticsearch遵循与之前所说完全相同的过程,这个过程如下:

  • 从旧文档中检索JSON
  • 修改它
  • 删除旧文档
  • 索引新文档
也可以使用update api进行局部更新,更方便有效
curl -i -XPOST '172.17.150.27:9200/megacorp/employee/1/_update?pretty' -d '{"doc":{"interests": [ "sports", "music" ]}}'

查询文档数量与明细
	curl -i -XGET '172.17.150.27:9200/megacorp/employee/_count?pretty'
	curl -i -XGET '172.17.150.27:9200/megacorp/employee/_search?pretty'
 
  
 Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计。它很像SQL中的GROUP BY但是功能更强大。
举个例子,让我们找到所有职员中最大的共同点(兴趣爱好)是什么:
GET /megacorp/employee/_search
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests" }
    }
  }
}
根据官方文档显示,出现该错误是因为5.x之后,Elasticsearch对排序、聚合所依据的字段用单独的数据结构(fielddata)缓存到内存里了,但是在text字段上默认
是禁用的, 如果有需要单独开启,这样做的目的是为了节省内存空间。
可以手动开启text字段的使用,
curl -XPUT 'http://172.17.150.27:9200/megacorp/_mapping/employee' -d '{"properties":{"interests":{"type":"text","fielddata":true}}}'
执行聚合命令
最后, elasticsearch的简单使用就写到这边了,主要参考 https://www.gitbook.com/book/looly/elasticsearch-the-definitive-guide-cn

猜你喜欢

转载自blog.csdn.net/nongfuyumin/article/details/79471639