node.js与elasticsearch交互

参考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;    //不重要

番外

介绍两款软件:

1、ES Toolbox 

他打开是这个样子的:

这个软件可以很好的测试es的查询。

2、kibana

因为是刚接触,所以暂时理解是强大的es数据可视化工具,还有N多个待发现。需要注意的是kibana版本必须和es版本一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值