最近有空就想研究下ElasticSearch。

此篇文章用来记录研究过程。备注:需要有一定的docker基础,ElasticSearch的基本概念

Docker安装ElasticSearch

首先,就是安装ElasticSearch。 因为有了docker,所以就不用按部就班的安装,直接通过下载ElasticSearch的镜像源就搞定。

理想是美好的,现实是残酷的。因为从国外拉取镜像太慢,我选择了国内的时速云。结果搜索ElasticSearch排名第一的镜像把我坑惨了,死活连不上。

只能慢慢找对应官网的镜像,我只是想吐槽下国内...国内...

1.下载镜像

docker pull index.tenxcloud.com/docker_library/elasticsearch:1.6

2. 开启镜像并映射端口9200(ElasticSearch的默认端口为9200)

docker run -p : -d index.tenxcloud.com/docker_library/elasticsearch:1.6

备注:如果是mac的话,还需要多在此之前多做一个端口映射的动作,具体可参照http://unmi.cc/mac-os-x-experience-docker/中的端口映射,

里面的流程图也说明了为何mac需要再多做一步。

3.测试是否安装成功,并且能够连通

curl 127.0.0.1:

这时候,会看到正常返回:

{
"status" : 200,
"name" : "James \"Jimmy\" Marks",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.6.2",
"build_hash" : "622039121e53e5f520b5ff8720fdbd3d0cb5326b",
"build_timestamp" : "2015-07-29T09:24:47Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}

Elasticsearch

与Elasticsearch交互

任何其他语言都可以使用你喜欢的网页客户端可以访问的RESTful API通过9200端口和 Elasticsearch通信。实际上,你甚至可以从命令行通过curl命令(当然你要去了解一下curl命令)和Elasticsearch通信。

curl -XGET 'http://localhost:9200/_count?pretty'
-d '
{
"query": {
"match_all": {}
}
}
'

说明:

-XGET适当的HTTP方法或者动作 : GET、POST、PUT、HEAD或者DELETE;

http:.........:9200表示集群任意节点的协议、主机名和端口;

_count表示请求的路径;

pretty任意可选的查询字符串参数,比如pretty将会漂亮的打印JSON格式的响应使它更容易阅读;

-d表示 HTTP POST方式传输数据;

{}中的部分表示JSON格式的请求包体(我们后面会常用这种形式);

query表示JSON格式的请求包体中的查询关键字;

match_all表示JSON格式的请求包体中的要查询的字段。Elasticsearch返回一个像 200 OK 的状态码和一个JSON格式的响应(HEAD请求除外)。 上面的curl请求将返回一个如下的JSON格式的响应:

{
"count" : 0,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
}
}

建立索引

Elasticsearch中建立一个索引来存储数据。比如我创建的索引是article。

curl -XPUT 'http://localhost:9200/article/'  

返回结果为:

{"acknowledged":true}

建立mapping

我们已经建立索引名为article的索引,我们在这将对article中的内容进行约束,进行验证。从而在存取数据时按照我们预定的规则进行存储。也就是我们在这里要建立article的mapping。下面代码是建立索引为article,索引类型为detail的mapping

curl -XPUT 'http://localhost:9200/article/_mapping/detail' -d '
{
"detail" : {
"dynamic" : true,
"properties" : {
"title" : { "type" : "string" },
"url" : { "type" : "string" },
"content" : { "type" : "string" }
}
}
}
'

返回结果为:

{"acknowledged":true}

数据保存

curl -XPOST  'http://localhost:9200/article/detail' -d '{
"title":"hello world!",
"url": "http://xxxx.com",
"content":"this is a test"
}'

返回结果:

{"_index":"article","_type":"detail","_id":"AVYrA6DFR3LFkvR34Ega","_version":1,"created":true}

ES数据检索

curl -XGET 'http://localhost:9200/article/detail/_search' -d '
{
"query":
{
"match":
{"content":"test"}
}
}'

返回结果:

{"took":7,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.15342641,"hits":[{"_index":"article","_type":"detail","_id":"AVYrA6DFR3LFkvR34Ega","_score":0.15342641,"_source":{
"title":"hello world!",
"url": "http://xxxx.com",
"content":"this is a test"
}}]}}

Node.js

node.js也有相关的elasticsearch包。

首先安装下:

npm install elasticsearch

初始化:

var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
host: 'localhost:9200',
log: 'trace'
});

试试下,我们通过node查找刚刚插入的数据

client.search({
index: 'article',
type: 'detail',
body: {
query: {
match: {
content: 'test'
}
}
}
}).then(function (resp) {
var hits = resp.hits.hits;
}, function (err) {
console.trace(err.message);
});

看下日志,哦啦!

暂时就研究了那么多,更加深入的待续......

Docker + ElasticSearch + Node.js的更多相关文章

  1. [第十八篇]——Docker 安装 Node.js之Spring Cloud大型企业分布式微服务云架构源码

    Docker 安装 Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一个让 JavaScript 运行在服务端的开发平台. 1.查看可用的 N ...

  2. Docker 生成Node.js web app(含端口映射)

    1.新建目录src,并进入src目录 [xiejdm@localhost Documents]$ mkdir src [xiejdm@localhost Documents]$ cd src/ 2.创 ...

  3. 利用Docker设置Node.js

      docker是一个开源的应用容器引擎,可以为我们提供安全.可移植.可重复的自动化部署的方式.docker采用虚拟化的技术来虚拟化出应用程序的运行环境.如上图一样.docker就像一艘轮船.而轮船上 ...

  4. [Docker] Linking Node.js and MongoDB Containers

    To do communcation between containers, we need to do link between containers. 1. Run a container wit ...

  5. docker部署node.js

    1.dockerfile FROM node:14.16.0 RUN mkdir -p /var/log/lily/ RUN mkdir -p /opt/node # 工作目录 WORKDIR /op ...

  6. Node.js 指南(迁移到安全的Buffer构造函数)

    迁移到安全的Buffer构造函数 移植到Buffer.from()/Buffer.alloc() API. 概述 本指南介绍了如何迁移到安全的Buffer构造函数方法,迁移修复了以下弃用警告: 由于安 ...

  7. 实践案例丨教你一键构建部署发布前端和Node.js服务

    如何使用华为云服务一键构建部署发布前端和Node.js服务 构建部署,一直是一个很繁琐的过程 作为开发,最害怕遇到版本发布,特别是前.后端一起上线发布,项目又特别多的时候. 例如你有10个项目,前后端 ...

  8. 当Node.js遇见Docker

    Node.js Best Practices - How to Become a Better Developer in 2017提到的几点,我们Fundebug深有同感: 使用ES6 使用Promi ...

  9. Docker常见仓库Node.js

    Node.js 基本信息 Node.js是基于 JavaScript 的可扩展服务端和网络软件开发平台. 该仓库提供了 Node.js 0.8 ~ 0.11 各个版本的镜像. 使用方法 在项目中创建一 ...

随机推荐

  1. Android实现蓝牙耳机连接

    代码地址如下:http://www.demodashi.com/demo/13259.html 前言 讲讲android对于蓝牙耳机连接技术的实现 今天涉及的内容有: 流程讲解 新建广播Bluetoo ...

  2. Android创建JSON格式数据

    Android创建JSON格式数据 作为上一篇博客的补充,简单那解说了一下Android创建JSON格式数据的小Demo. 1. 创建JSON格式数据 对于Android创建JSON格式数据.因为An ...

  3. 在CMD中查看端口被什么程序占用

    我们要查看端口被什么程序占用,可以使用下面方法.比如端口28848 1. 打开cmd,输入命令netstat -ano | findstr ":28848",显示结果如下,最后一个 ...

  4. 【JavaScript】JavaScript DOM 编程

    在开发的时候,最主要是对DOM进行操作.DOM:Document Object Model 文本对象模型. DOM能够以一种独立于平台和语言的方式訪问和改动一个文档的内容和结构. DOM是针对xml( ...

  5. python装饰器的理解

    学习python,发现装饰器是一个比较难理解的地方. 下面用代码来说明. 装饰器的作用是为了切面编程(AOP).这种编程在java上有很多实现方式.下面直接说明吧: 1.作为装饰器的函数至少有两个de ...

  6. Tomcat控制台输出

    在Tomcat中,默认将终端输出信息输出到: $CATALINA_HOME/logs/catalina.out  其中$CATALINA_HOME是tomcat的安装目录. tomcat启动后,该文件 ...

  7. java中Calendar.getInstance()和new Date()的差别是什么?

    java中Calendar.getInstance()和new Date()的差别如下: Calendar.getInstance()是获取一个Calendar对象并可以进行时间的计算,时区的指定ne ...

  8. vue 深入响应式原理

    vue最显著的特性就是不太引人注意的响应式系统(reactivity system),模型层(model)只是普通的javascript对象,修改它则更新视图view.这会让状态管理变得非常简单且直观 ...

  9. FastMethod和PropertyUtils两种反射方法的性能比较

    这两个类都提供反射方法的实现,性能对比如下: 循环条件是:1亿次 结论:PropertyUtils提供的getXXX和setXXX反射方法的性能是FastMethod的三倍 以下是测试方法: 首先是F ...

  10. Android 四大组件学习之Service六

    上几节.我们学习怎样用StartServer启动一个服务,用bindServer去绑定一个服务.以及服务的生命周期,以及什么是IntentService. 也许有读者会发现,我们BindServer中 ...