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
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