Node + Elasticsearch入门
为什么要用Elasticsearch?
以前一些简单的搜索功能,我们可以使用sql的查询语句实现,但是随着数据的增大,并且需求的增多,简单的sql查询已经不满足需求,
Elasticsearch的功能:
1,分布式的搜索引擎和数据分析引擎;
2,全文检索,结构化检索,数据分析;
3,对海量数据进行近实时的处理;
Elasticsearch与编程语言交互
Elasticsearch 使用的是标准的 RESTful API 和 JSON。此外,我们还构建和维护了很多其他语言的客户端,例如 Java、Python、.NET、SQL 和 PHP。
安装Elasticsearch
在安装ES之前,我们需要安装java 1.8环境,java 1.8环境安装成功后,我们就可以安装ES了。
MAC环境下安装ES
Mac系统下使用Homebrew安装ES
brew install elasticsearch
Centos下安装ES
切换到安装目录下,例如安装到/usr/share/,ES版本可以自行改变;
$ cd /usr/share/
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.tar.gz
$ tar -xvzf elasticsearch-6.5.0.tar.gz
$ cd elasticsearch-6.5.0/
启动ES
$ cd bin/
$ ./elasticsearch
但是你会发现出现下面这个错误
从错误信息中可以看出,ES不能使用root启动。
解决这个问题方法:
创建一个独立的用户,比如elk来启动elasticsearch,不用root用户启动;
创建用户
创建es用户后切换到es账号,再启动ES
$ useradd es
$ cd /usr/share/
$ chown -R es:es elasticsearch-6.5.0
$ su es
$ cd /usr/share/elasticsearch-6.5.0
$ cd bin/
$ ./elasticsearch -d
注意: -d表示后台运行
查看是否启动成功,ES的默认端口是在9200;启动elasticsearch后,可以访问http://localhost:9200/
,查看是否启动成功。
出现这个界面表示启动成功。
简单操作
查看集群状态
curl -XGET 'localhost:9200/_cat/health?v&pretty'
集群的节点列表
curl -XGET 'localhost:9200/_cat/nodes?v&pretty'
建立索引
curl -H "Content-Type: application/json" -XPUT 'localhost:9200/books?pretty&pretty'
列出所有的索引
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
删除索引
curl -XDELETE 'localhost:9200/books?pretty&pretty'
实现简单查询
查询书价等于11的数据
curl -H 'Content-Type: application/json' -XGET 'localhost:9200/books/_search?pretty' -d'
{"query": {
"match": {
"price": 11
}
}
}'
Elasticsearch和Node结合使用
创建一个Node.js环境
使用express启动服务。
const express = require('express');
const app = express();
app.get('/', (req, res)=> {
var responseText = 'Hello world!';
res.send(responseText);
})
app.listen(3000, ()=> {
console.log('服务已启动 - 3000');
})
安装elasticsearch模块
弹性搜索为Node.js提供一个官方模块,称为elasticsearch;
yarn add elasticsearch
然后,你可以在脚本里导入模块,如下所示:
const elasticsearch = require('elasticsearch');
使用Node.js建立索引
elasticsearch.js;
...
const elasticsearch = require('elasticsearch');
const esClient = new elasticsearch.Client({
host: '127.0.0.1:9200',
log: 'error'
});
const bulkIndex = function bulkIndex(index, type, data) {
let bulkBody = [];
data.forEach(item => {
bulkBody.push({
index: {
_index: index,
_type: type,
_id: item.id
}
});
bulkBody.push(item);
});
esClient.bulk({body: bulkBody}).then(response => {
let errorCount = 0;
response.items.forEach(item => {
if (item.index && item.index.error) {
console.log(++errorCount, item.index.error);
}
});
}).catch(console.err);
};
const test = function test() {
const books = fs.readFileSync('data.json');
const book = JSON.parse(books);
console.log(`${book.length} items parsed from data file`);
bulkIndex('books', 'book', book);
};
test();
...
运行elasticsearch.js,
索引建立成功后,可以使用ElasticSearch Toolbox来查看建立的索引;
好了,今天介绍到这里,下一篇分词查询,未完待续。。。
如果有什么好的建议或者意见请关注公众号