ElasticSearch初探(一)

ElasticSearch的官网
https://www.elastic.co/

一、安装
ElasticSearch是基于Lence的,而Lence是用Java编写的开源库,需要依赖Java的运行环境。现在使用的ELasticSearch版本是1.6,它需要jdk1.7或以上的版本。
本文使用的是linux系统,安装配置好Java环境,把download下来,解压后直接执行启动就可以了。


1.安装启动elasticsearch:
cd到elasticsearch-1.6.0.tar.gz 放置的目录,
解压 tar -xvf elasticsearch-1.6.0.tar.gz 
启动 ./elasticsearch-1.6.0/bin/elasticsearch,查看启动信息,会提到http的默认端口是9200,transport的默认端口是9300,这个非常重要。


接下来可以在Terminal输入一下命令,查看一些基本信息
查看集群
curl 'localhost:9200/_cat/health?v'
查看节点
curl 'localhost:9200/_cat/nodes?v'
查看索引
curl 'localhost:9200/_cat/indices?v'
以上这些信息均可在安装head插件后,在http://localhost:9200/_plugin/head/中查看

2. 安装head插件
cd到elasticsearch-1.6.0/bin目录,运行./plugin -install mobz/elasticsearch-head,
安装并启动elasticsearch后,在浏览器打开http://localhost:9200/_plugin/head/,即可看到es的集群、节点、索引、数据等等的信息。


二、基本操作
主要操作:增、删、改、查、批量操作、

1.建立索引:
 curl -XPUT 'localhost:9200/megacorp/employee/8?pretty' -d '{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}'
结果
{
  "_index" : "megacorp",
  "_type" : "employee",
  "_id" : "8",
  "_version" : 1,
  "created" : true
}
建立了索引_index为megacorp,类型_type为employee,_id为8的文档。带有一个pretty的参数,意思就是返回的结果格式化成json格式来显示。另外,请留意一下返回来的结果,有一个”_version”的字段,表示该条数据的版本号,现在这条数据是初次创建,所以其值为1。
而上述的三个节:_index, _type, _id是文档的元数据,也是必须的三个元数据节点。

注意:id仅仅是一个字符串,它与_index和_type组合时,就可以在ELasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义_id,也可以让Elasticsearch帮你自动生成。但在一个type中,id必须是唯一的。重复运行上面的命令,返回的结果版本号会改变,如果内容有修改,则会覆盖掉原来的值。

2.删除
删除文档
curl -XDELETE 'localhost:9200/megacorp/employee/3?pretty'
删除类型
curl -XDELETE 'localhost:9200/megacorp/employee
删除索引
curl -XDELETE 'localhost:9200/megacorp

细心观察上面的指令,可以发现,指令的格式如下,它采用了REST的风格,使得使用者非常简单的可以学习这个命令。
curl -X :///

另外,删除文档还有一种方法,类似与sql的delete-where,命令如下
curl -XDELETE 'localhost:9200/megacorp/employee/_query?pretty' -d '{
“query”: { “match”: { “first_name” : “Douglas” } }
}'
这样就会删除employee类型中,所有first_name含Douglas关键字的文档。

3.查看索引中的文档:
curl -XGET 'localhost:9200/megacorp/employee/8?pretty'
結果:
{
  "_index" : "megacorp",
  "_type" : "employee",
  "_id" : "8",
  "_version" : 3,
  "found" : true,
  "_source":{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
   }
}

4. 修改文档
1)可以重复运行上面建立索引的命令,即可覆盖原来的文档,起到修改的效果。
2)也可以使用下面的命令:
curl -XPUT 'localhost:9200/megacorp/employee/8?pretty' -d '{
“doc”: {
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets update this document",
    "interests":  [ "forestry" ]
}
}'
使用这样的方法更新数据,ElasticSearch不是在原来的文档进行覆盖,而是删除原来的文档,建立一个新的文档。

5. 批量操作
上面提到的都是一个命令执行单一的操作,没一次的操作都要发送一个请求,这样是非常消耗资源的,而ElasticSearch考虑到这一点,提供批量操作的接口,允许一次请求包含多个操作,并执行完所有操作后返回结果。
如:
curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d ' {"index":{"_id":"1"}} {"name": "John Doe" } {"index":{"_id":"2"}} {"name": "Jane Doe" } '
建立了索引的两个文档。
再如:
curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d ' {"update":{"_id":"1"}} {"doc": { "name": "John Doe becomes Jane Doe" } } {"delete":{"_id":"2"}} '
使用_bulk API实现批量操作,当请求包含多个操作,那些操作将会按顺序地执行,期间如果出现错误,则跳到下一个继续执行,直到所有操作执行完毕,所有操作的结果就会返回,从中我们就可以查看到各个操作的执行情况了。
以下就是上面第二条指令执行的结果:
{
  "took" : 6,
  "errors" : false,
  "items" : [ {
    "update" : {
      "_index" : "customer",
      "_type" : "external",
      "_id" : "1",
      "_version" : 4,
      "status" : 200
    }
  }, {
    "delete" : {
      "_index" : "customer",
      "_type" : "external",
      "_id" : "2",
      "_version" : 3,
      "status" : 200,
      "found" : true
    }
  } ]
}

还可以通过一个json文件导入数据,把上面命令-d后的信息放到一个.json的文件中,即可执行里面的相关操作。
curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json

三、搜索
有两种基本的方式进行搜索,主要的区别就是发送参数的形式,一种是以REST 请求URI的形式传参,另一种则是以REST请求体的方式传参。使用请求体的方式传参,参数的表达式可以更丰富,而且可读性更好,一般推荐使用这种方式。

REST quest URI:
curl 'localhost:9200/bank/_search?q=*&pretty'
这命令的做的事情是,搜索出bank索引中所有的文档。

REST request body:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d ' { "query": { "match_all": {} } }'

值得大家注意的一点是,当搜索结果返回后,elasticsearch就会结束这个请求,将不会在服务端缓存任何结果或保持请求的链接。
另外ElasticSearch还提供一种json风格的领域专用语言,供使用者实现查询,在ES中可成为Query DSL,功能非常强大,现在在这就先不详细说明了。



本文参考文章有:
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
http://learnes.net/getting_started/README.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值