Elasticsearch 安装使用
2015-02-16 21:56
369 查看
Elasticsearch是一个全文搜索引擎。
安装Elasticsearch时需要先安装Java
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.zipunzip elasticsearch-1.4.2.zipcd elasticsearch-1.4.2./bin/elasticsearch
安装Marvel
Marvel是一个管理和监控Elasticsearch的工具。它提供一个叫Sense的交互式接口方便通过浏览器与Elasticsearch交互。
bin/plugin -i elasticsearch/marvel/latest
如果不想使用Marvel监控本地集群,可以使用如下方式关闭Marvel监控
bin]$ sudo ./elasticsearch
使用-d参数可以将Elasticsearch放到后台运行
bin]$ sudo ./elasticsearch -d
查看Elasticsearch中的数据
通过config/elasticsearch.yml设置cluster.name和node.name
可以通过以下方式关闭Elasticsearch
Talking to Elasticsearch
根据是否使用Java语言,与Elasticsearch交互有几种方法,如果是Java API参见文档
http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/index.html
如果使用其他语言,则使用Elasticsearch提供的RESTFUL API,或者可以直接使用linux命令curl访问
VER HTTP请求方式,GET,POST,PUT,HEAD或DELETE
PROTOCOL 使用HTTP或者HTTPS
HOST Elasticsearch集群中的任意一个node的主机名,如果是在node本机就直接使用localhost
PORT Elasticsearch运行HTTP服务的端口,默认是9200
QUERY_STRING 查询参数
BODY JSON格式的请求数据
通过Marvel的Sense接口访问Elasticsearch
http://xxxx.com:9200/_plugin/marvel/sense/index.html
以下直接使用GET或PUT的简略形式,都是直接使用Marvel的Sense接口访问Elasticsearch,可以点击“Copy as cURL”查看对应的curl命令写法
megacorp 索引名称,类似关系型数据库的数据库名称
employee 类型名称,类似关系型数据库的表名称
1 特定employee的ID
在Sense中输入
Elasticsearch提供了一个丰富的,灵活的查询语言,叫做DSL.Domain-specific language(DSL)使用特定的JSON请求。
查找所有last name为Smith,年龄大于30的员工
Full-text search 全文搜索
搜索所有喜欢rock climbing的员工
在Sense中输入
查看查询结果
如果想要完全匹配查询条件,可以使用短语搜索phrase search
使用match_phrase进行条件匹配
Highlight our searches高亮显示查询结果
使用Elasticsearch的聚合函数可以对数据进行复杂的分析。类似SQL语言的GROUP BY语句。
Elasticsearch可以横向扩展到几百台服务器,处理PB以上的数据。
参考文档
http://www.elasticsearch.com/guide/en/elasticsearch/guide/current/index.html
http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/index.html
本文出自 “Linux SA John” 博客,请务必保留此出处http://john88wang.blog.51cto.com/2165294/1614701
安装Elasticsearch时需要先安装Java
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.zipunzip elasticsearch-1.4.2.zipcd elasticsearch-1.4.2./bin/elasticsearch
安装Marvel
Marvel是一个管理和监控Elasticsearch的工具。它提供一个叫Sense的交互式接口方便通过浏览器与Elasticsearch交互。
bin/plugin -i elasticsearch/marvel/latest
如果不想使用Marvel监控本地集群,可以使用如下方式关闭Marvel监控
echo 'marvel.agent.enabled: false' >> ./config/elasticsearch.yml可以通过前台的方式启动Elasticsearch
bin]$ sudo ./elasticsearch
使用-d参数可以将Elasticsearch放到后台运行
bin]$ sudo ./elasticsearch -d
查看Elasticsearch中的数据
$ curl "http://localhost:9200/?pretty" { "status" : 200, "name" : "xxx", "cluster_name" : "elasticsearch", "version" : { "number" : "1.4.2", "build_hash" : "927caff6f05403e936c20bf4529f144f0c89fd8c", "build_timestamp" : "2014-12-16T14:11:12Z", "build_snapshot" : false, "lucene_version" : "4.10.2" }, "tagline" : "You Know, for Search" }
通过config/elasticsearch.yml设置cluster.name和node.name
可以通过以下方式关闭Elasticsearch
curl -XPOST 'http://localhost:9200/_shutdown'
Talking to Elasticsearch
根据是否使用Java语言,与Elasticsearch交互有几种方法,如果是Java API参见文档
http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/index.html
如果使用其他语言,则使用Elasticsearch提供的RESTFUL API,或者可以直接使用linux命令curl访问
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/?<QUERY_STRING>' -d '<BODY>'
VER HTTP请求方式,GET,POST,PUT,HEAD或DELETE
PROTOCOL 使用HTTP或者HTTPS
HOST Elasticsearch集群中的任意一个node的主机名,如果是在node本机就直接使用localhost
PORT Elasticsearch运行HTTP服务的端口,默认是9200
QUERY_STRING 查询参数
BODY JSON格式的请求数据
$ curl -XGET 'http://localhost:9200/_count?pretty' -d ' { "query": { "match_all": {} } } ' { "count" : 22692, "_shards" : { "total" : 3, "successful" : 3, "failed" : 0 } }
$ curl -i -XGET 'localhost:9200/' HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 Content-Length: 334 { "status" : 200, "name" : "jidong", "cluster_name" : "elasticsearch", "version" : { "number" : "1.4.2", "build_hash" : "927caff6f05403e936c20bf4529f144f0c89fd8c", "build_timestamp" : "2014-12-16T14:11:12Z", "build_snapshot" : false, "lucene_version" : "4.10.2" }, "tagline" : "You Know, for Search" }
Relational DB Databases Tables Rows Columns Elasticsearch Indices Types Documents Fields
通过Marvel的Sense接口访问Elasticsearch
http://xxxx.com:9200/_plugin/marvel/sense/index.html
以下直接使用GET或PUT的简略形式,都是直接使用Marvel的Sense接口访问Elasticsearch,可以点击“Copy as cURL”查看对应的curl命令写法
PUT /megacorp/employee/1 { "first_name" : "John", "last_name" : "Smith", "age" : 25, "about" : "I love to go rock climbing", "interests": [ "sports", "music" ] }
/megacorp/employee/1这个路径包含三个信息
megacorp 索引名称,类似关系型数据库的数据库名称
employee 类型名称,类似关系型数据库的表名称
1 特定employee的ID
PUT /megacorp/employee/2 { "first_name" : "Jane", "last_name" : "Smith", "age" : 32, "about" : "I like to collect rock albums", "interests": [ "music" ] } PUT /megacorp/employee/3 { "first_name" : "Douglas", "last_name" : "Fir", "age" : 35, "about": "I like to build cabinets", "interests": [ "forestry" ] }
在Sense中输入
GET /megacorp/employee/1显示结果
{ "_index" : "megacorp", "_type" : "employee", "_id" : "1", "_version" : 1, "found" : true, "_source" : { "first_name" : "John", "last_name" : "Smith", "age" : 25, "about" : "I love to go rock climbing", "interests": [ "sports", "music" ] } }
GET /megacorp/employee/_search
{ "took": 6, "timed_out": false, "_shards": { ... }, "hits": { "total": 3, "max_score": 1, "hits": [ { "_index": "megacorp", "_type": "employee", "_id": "3", "_score": 1, "_source": { "first_name": "Douglas", "last_name": "Fir", "age": 35, "about": "I like to build cabinets", "interests": [ "forestry" ] } }, { "_index": "megacorp", "_type": "employee", "_id": "1", "_score": 1, "_source": { "first_name": "John", "last_name": "Smith", "age": 25, "about": "I love to go rock climbing", "interests": [ "sports", "music" ] } }, { "_index": "megacorp", "_type": "employee", "_id": "2", "_score": 1, "_source": { "first_name": "Jane", "last_name": "Smith", "age": 32, "about": "I like to collect rock albums", "interests": [ "music" ] } } ] } }
GET /megacorp/employee/_search?q=last_name:Smith
{ ... "hits": { "total": 2, "max_score": 0.30685282, "hits": [ { ... "_source": { "first_name": "John", "last_name": "Smith", "age": 25, "about": "I love to go rock climbing", "interests": [ "sports", "music" ] } }, { ... "_source": { "first_name": "Jane", "last_name": "Smith", "age": 32, "about": "I like to collect rock albums", "interests": [ "music" ] } } ] } }
Elasticsearch提供了一个丰富的,灵活的查询语言,叫做DSL.Domain-specific language(DSL)使用特定的JSON请求。
GET /megacorp/employee/_search { "query" : { "match" : { "last_name" : "Smith" } } }这里没有使用查询参数,使用match匹配查询条件。输出结果和上个例子相同。
查找所有last name为Smith,年龄大于30的员工
[object Object][object Object]
{ ... "hits": { "total": 1, "max_score": 0.30685282, "hits": [ { ... "_source": { "first_name": "Jane", "last_name": "Smith", "age": 32, "about": "I like to collect rock albums", "interests": [ "music" ] } } ] } }
Full-text search 全文搜索
搜索所有喜欢rock climbing的员工
在Sense中输入
GET /megacorp/employee/_search { "query" : { "match" : { "about" : "rock climbing" } } }
查看查询结果
[object Object][object Object]默认情况下,Elasticsearch根据匹配结果的relevance score进行排序,表示匹配程度。可以看到第二个匹配结果只包含rock也被显示出来。
如果想要完全匹配查询条件,可以使用短语搜索phrase search
使用match_phrase进行条件匹配
GET /megacorp/employee/_search { "query" : { "match_phrase" : { "about" : "rock climbing" } } }
{ ... "hits": { "total": 1, "max_score": 0.23013961, "hits": [ { ... "_score": 0.23013961, "_source": { "first_name": "John", "last_name": "Smith", "age": 25, "about": "I love to go rock climbing", "interests": [ "sports", "music" ] } } ] } }现在就只有一条搜索结果
Highlight our searches高亮显示查询结果
GET /megacorp/employee/_search { "query" : { "match_phrase" : { "about" : "rock climbing" } }, "highlight": { "fields" : { "about" : {} } } }
{ ... "hits": { "total": 1, "max_score": 0.23013961, "hits": [ { ... "_score": 0.23013961, "_source": { "first_name": "John", "last_name": "Smith", "age": 25, "about": "I love to go rock climbing", "interests": [ "sports", "music" ] }, "highlight": { "about": [ "I love to go <em>rock</em> <em>climbing</em>" ] } } ] } }
使用Elasticsearch的聚合函数可以对数据进行复杂的分析。类似SQL语言的GROUP BY语句。
GET /megacorp/employee/_search { "aggs": { "all_interests": { "terms": { "field": "interests" } } } }
{ ... "hits": { ... }, "aggregations": { "all_interests": { "buckets": [ { "key": "music", "doc_count": 2 }, { "key": "forestry", "doc_count": 1 }, { "key": "sports", "doc_count": 1 } ] } } }
GET /megacorp/employee/_search { "query": { "match": { "last_name": "smith" } }, "aggs": { "all_interests": { "terms": { "field": "interests" } } } }
... "all_interests": { "buckets": [ { "key": "music", "doc_count": 2 }, { "key": "sports", "doc_count": 1 } ] }
Elasticsearch可以横向扩展到几百台服务器,处理PB以上的数据。
参考文档
http://www.elasticsearch.com/guide/en/elasticsearch/guide/current/index.html
http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/index.html
本文出自 “Linux SA John” 博客,请务必保留此出处http://john88wang.blog.51cto.com/2165294/1614701
相关文章推荐
- Elasticsearch集群安装与使用
- ElasticSearch使用IK中文分词---安装步骤记录
- 【Elasticsearch】安装使用ik中文分词
- Elasticsearch搜索安装和使用
- 安装和使用 Elasticsearch
- elasticsearch在ubuntu16下的安装及php中的使用
- windows下elasticSearch以及elasticSearch-php安装及使用
- ElasticSearch中head插件安装及创建索引,插入文档,使用
- Elasticsearch安装使用教程
- linux ubuntu ElasticSearch 安装 基本使用
- 安装和使用 Elasticsearch
- linux下ElasticSearch(es)安装使用部署
- Elasticsearch初步使用(安装、Head配置、分词器配置)
- linux下ElasticSearch(es)安装使用部署
- ElasticSearch的安装和使用笔记
- elasticsearch 1.5 + mysql安装配置与简单使用
- es 一 ---- elasticsearch1.5安装使用+IK中文分词
- Elasticsearch初步使用(安装、Head配置、分词器配置)
- ElasticSearch学习教程(二) Head插件安装及使用