参考elasticsearch(以下简称es)官方javascript的API:https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/6.x/api-reference.html
1、版本介绍
本文es版本:6.5.4
注意:6.*版本支持使用多个不同的type查询,但是不支持插入多个不同的type,7.*版本之后彻底取消type
下载链接:https://www.elastic.co/cn/downloads/elasticsearch
2、在node项目中创建elastic_search.js。
var elasticsearch = require('elasticsearch');
const client = new elasticsearch.Client({
host: '127.0.0.1:9200', //9200是你的elasticsearch的启动端口
log: 'error'
});
client.ping({ requestTimeout: 30000 }, function(error) {
if (error) {
console.error('elasticsearch集群关闭!');
} else {
console.log('elasticsearch正常');
}
});
/**
* 向ralsticsearch中写入数据 当文件中有这条数据时进行更新
* @param index 索引
* @param type 类型
* @param data 需要插入的数据
*/
module.exports.bulkIndex = (index, type, data) =>{
let bulkBody = [];
data.forEach(item => {
bulkBody.push({
index: {
_index: index,
_type: type,
_id: item.id
}
});
bulkBody.push(item);
});
console.log({bulkBody:bulkBody});
client.bulk({body: bulkBody})
.then(response => {
let errorCount = 0;
response.items.forEach(item => {
if (item.index && item.index.error) {
console.log(++errorCount, item.index.error);
}
});
console.log(
`成功索引 ${data.length} 条数据中的 ${data.length - errorCount} 条`
);
})
.catch(console.err);
};
/**
* 验证录入的数据
* @returns {Promise<T | void>} 返回索引具体信息
*/
module.exports.verify = () =>{
console.log(`elasticsearch指标信息:`);
return client.cat.indices({v: true})
.then(console.log)
.catch(err => console.error(`连接到es客户端错误: ${err}`));
};
/**
* 从ralsticsearch中查询数据
* @param index 索引
* @param body 查询内容
* @returns {*} 返回查询结果
*/
module.exports.search = (index, body) =>{
return client.search({index: index, body: body})
.then(results => {
console.log(`查询 ${results.hits.total} 条文档,使用了 ${results.took}ms`);
console.log(`返回的值:`);
results.hits.hits.forEach(
(hit, index) => console.log(
{source:hit._source,hit:hit}
)
)
})
.catch(console.error);
};
注意:在js也开头导入es模块
var elasticsearch = require('elasticsearch');
如果没有导入过该模块则在项目目录下运行cmd,在cmd中输入 npm install elasticsearch
3、在需要与es交互的js中调用相关的方法,这里创建index.js来测试。
let express = require('express'),
es = require('./elastic_search'),
router = express.Router();
/*随便写个接口来测试es添加数据的方法*/
router.get('/inserES', (req, res) => {
var a = [{
"id": "1",
"user" : "小丑",
"message" : "why so serious",
"uid" : 2,
"age" : 20
}] //测试数据
es.bulkIndex("test","test1",a); //调用方法进行对es的添加
res.redirect('/inserES'); //这是啥不重要
});
module.exports = router; //不重要
注意:在js头部导入elastic_search.js
es = require('./elastic_search')
接下来测试查询es数据的方法:
let express = require('express'),
es = require('./elastic_search'),
router = express.Router();
/*随便写个接口来测试es查询数据的方法*/
router.get('/searchES', (req, res) => {
let body = {
size: 4, //查询数据量大小
query: {
match : {
user : "小丑"
}
}
};
es.search("test", body); //调用方法进行对es的查询
res.redirect('/searchES'); //这是啥不重要
});
module.exports = router; //不重要
番外
介绍两款软件:
他打开是这个样子的:
这个软件可以很好的测试es的查询。
2、kibana
因为是刚接触,所以暂时理解是强大的es数据可视化工具,还有N多个待发现。需要注意的是kibana版本必须和es版本一致。