安装es: 官网下载解压
- 启动 bin/elasticsearch -d (后台启动)
- 判断是否成功的标志 curl http://localhost:9200/?pretty
9200是es的默认端口,可以在config/elasticsearch.yml中修改
启动成功如下图所示:
-
head 插件
head插件是es的一个可视化插件,类似于workbench跟mysql的关系进入github head github 按照readme 文件安装,我这里选择的是以谷歌浏览器插件的方式安装,如下图
-
marvel插件
marvel插件主要是用来监控的,也可以用来当console来使用 -
postman
用于和es交互,发送请求
节点 Node、集群 Cluster 和分片 Shards
ElasticSearch 是分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个实例。单个实例称为一个节点(node),一组节点构成一个集群(cluster)。分片是底层的工作单元,文档保存在分片内,分片又被分配到集群内的各个节点里,每个分片仅保存全部数据的一部分。
索引 Index、类型 Type 和文档 document
如果我们要访问一个文档元数据应该包括囊括 index/type/id 这三种类型
对比 MySQL 数据库:
index → db type → table document → row3.2 创建数据
所有语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信。一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成:
curl -X' :// : / ? ' -d ''
- VERB是 HTTP 方法,可选 : GET、 POST、 PUT、 HEAD 或者 DELETE
- PROTOCOL 即 http 或者 https
- HOST Elasticsearch 集群中任意节点的主机名,用 localhost 代表本地机器上的节点
- PORT 运行 Elasticsearch HTTP 服务的端口号,默认是 9200
- PATH API 的终端路径(例如 _count 将返回集群中文档数量)Path 可能包含多个组件,例如:_cluster/stats 和 _nodes/stats/jvm
- QUERY_STRING 任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)
- BODY 一个 JSON 格式的请求体
将 HTTP 命令PUT新建文档, GET 可以用来检索文档,同样的,可以使用 DELETE 命令来删除文档,以及使用 HEAD 指令来检查文档是否存在。如果想更新已存在的文档,只需再次 PUT
下面使用postman和es来交互进行数据创建和查询:
创建数据
创建员工目录,为每个员工的文档(document)建立索引,每个文档包含了相应员工的所有信息
- 每个文档的类型为employee
- employee类型归属于索引megacorp
- megacorp索引存储在Elasticsearch集群中
PUT /megacorp/employee/3 { "first_name" : "Douglas", "last_name" : "Fir", "age" : 35, "about": "I like to build cabinets", "interests": [ "forestry" ] }
在postman中 *** 作如下
插入三个数据可以使用head插件查看相关信息:
可以通过http get来获信息
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" ] } }
_index 索引名称
_type 类型名称
_id id(这个id可以自己指定也可以自动生成)
_version 版本号,每次改动会+1
found true表示在document存在
_source document的全部内容
轻量级搜索
查询字符串
GET /megacorp/employee/_search?q=last_name:Smith
返回
{ "took": 31, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 2, "relation": "eq" }, "max_score": 0.4700036, "hits": [ { "_index": "megacorp", "_type": "employee", "_id": "1", "_score": 0.4700036, "_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": 0.4700036, "_source": { "first_name": "Jane", "last_name": "Smith", "age": 32, "about": "I like to collect rock albums", "interests": [ "music" ] } } ] } }
Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。我们可以这样表示之前关于“Smith”的查询
GET /megacorp/employee/_search { "query" : { "match" : { "last_name" : "Smith" } } }
过滤器
更复杂的搜索,使用过滤器(filter)来实现sql中where的效果,比如:你想要搜索一个叫Smith,且年龄大于30的员工,可以这么检索.
{ "query": { "bool": { "filter": { "range": { "age": { "gt": 30 } } }, "must": { "match": { "last_name": "Smith" } } } } }
短语搜索
GET /megacorp/employee/_search { "query" : { "match_phrase" : { "about" : "rock climbing" } } }
match_phrase与match的区别在于,前者会把rock climbing(搜索条件)作为一个整体,而后者会命中rock balabala climbing(后者只要命中其中一个词就算命中,比如rock climbing中命中rock就算匹配中了,就会返回结果)
官方文档
知乎-Elasticsearch【快速入门】
简书-Elasticsearch入门语法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)