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

时间: 2024-10-06 04:43:14

ElasticSearch初探(一)的相关文章

Elasticsearch初探

 elasticsearch中的概念同传统数据库的类比如下: Relational DB -> Databases -> Tables -> Rows -> ColumnsElasticsearch -> Indices -> Types -> Documents -> Fields 导入数据API: curl -XPOST 'http://localhost:9200/prd/xjb3/_bulk' --data-binary @last.json   l

全文搜索引擎Elasticsearch初探

前言: 在Web应用或后台数据管理中,随着数据量的倍数增长,搜索引擎特别是全文搜索引擎的应用越来越迫切.基于技术和成本考虑,我们不可能去开发一个搜索引擎以满足我们的需求,庆幸的是业界已有许多优秀的开源搜索引擎可供我们使用,Elasticsearch便是其中之一. 简介: Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库.但是,Lucene只是一个库.想要使用它,你

hadoop 读写 elasticsearch 初探

1.参考文档: http://www.elasticsearch.org/guide/en/elasticsearch/hadoop/current/configuration.html http://www.elasticsearch.org/guide/en/elasticsearch/hadoop/current/mapreduce.html#_emphasis_old_emphasis_literal_org_apache_hadoop_mapred_literal_api 2.Mapr

ElasticSearch集群服务器配置

一.安装 简单的安装与启动于前文ElasticSearch初探(一)已有讲述,这里不再重复说明. 二.启动 1.自带脚本启动 1)bin/elasticsearch,不太任何参数,默认在前端启动 2)bin/elasticsearch-d,带参-d,表示在后台作为服务线程启动 还可以设置更多的参数:bin/elasticsearch-Xmx2g-Xms2g-Des.index.store.type=memory--node.name=my-node 注意:如果是在局域网中运行elasticsea

Elasticsearch聚合--Metrics初探

Elasticsearch是一款提供检索以及相关度排序的开源框架,同时,也支持对存储的文档进行复杂的的统计-聚合.kubana的图标就是基于聚合来绘制的.更多内容请参考Elasticsearch+Logstash+Kibana教程 前言 ES中的聚合被分成两大类:Metrics度量和bucket桶,metrics类似于SQL中的avg.max.min等方法,而bucket类似于group by了. 本篇就简单的介绍一下metrics的用法. metrics的聚合按照值的返回类型可以分为两种:单值

初探Elasticsearch

由于项目需要,最近需要学习以下Elasticsearch(本身支持全文检索与模糊查询,这个就与传统的DB区分开来,另一个可选方案是solr)的学习,抽了几个小时时间看了一下,发现确实不错.由于Linux在单位(部署的时候确实是有一些环境变量的问题),懒得开VPN了,所以就从笔记本尝试了以下. ElasticSearch集成了传统数据库的精确查找与现代化搜索引擎的查找需求,所以从一定程度可以实现对资源的一种全文搜索与精确搜索的结合,该方案可以应用在常见的站内搜索,资源匹配,甚至构建自己的搜索引擎,

ElasticSearch入门系列(四)分布式初探

序言:ElasticSearch致力于隐藏分布式系统的复杂性,以下的操作都是在底层自动完成的: 将你的文档分区到不同的容器或者分片(shards),他们可以存在于一个或多个节点中 将分片均匀的分配到各个节点,对索引的搜索做负载均衡 冗余每一个分片,防止硬件故障造成的数据丢失 将集群中任意一个节点上的请求路由到相应数据所在的节点 无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移 一.集群内部工作方式 Elasticsearch用于构建高可用结可扩展的系统.扩展的方式可以是购买更好的服务

ElasticStack学习(八):ElasticSearch索引模板与聚合分析初探

一.Index Template与Dynamic Template的概念 1.Index Template:它是用来根据提前设定的Mappings和Settings,并按照一定的规则,自动匹配到新创建的索引上. 1)模板仅是一个索引被创建时才会起作用,修改模板并不会影响已创建的索引: 2)可以设定多个索引模板,这些设置会被merge在一起: 3)通过指定order的数值,控制merge的过程: 2.Index Template的工作方式如下: 当一个索引被创建时,会执行如下操作: 1)应用Ela

Elasticsearch聚合初探——metric篇

前言 ES中的聚合被分为两大类:Metric度量和bucket桶(原谅我英语差,找不到合适的词语.....就用单词来说吧!).说的通俗点,metric很像SQL中的avg.max.min等方法,而bucket就有点类似group by了. 本篇就简单的介绍一下metric聚合的用法. metric的聚合按照值的返回类型可以分为两种:单值聚合 和 多值聚合. 单值聚合 Sum 求和 这个聚合返回的是单个值,dsl可以参考如下: "aggs" : { "intraday_retu