node.js与elasticsearch交互

2023-11-20

参考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版本一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node.js与elasticsearch交互 的相关文章

随机推荐

  • 【算法竞赛宝典】排名次

    算法竞赛宝典 排名次 题目描述 代码展示 代码讲解 题目描述 代码展示 求名次 include
  • MyBatis学习笔记整理详细

    MyBatis笔记 写在前面 欢迎来到 发奋的小张 的博客 我是小张 一名普通的在校大学生 在学习之余 用博客来记录我学习过程中的点点滴滴 也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获 希望大家多多关照 我们一起成长一起进步 也
  • STM32F103C8t6程序下载

    一 下载程序之前了解的内容 STM32英文手册下载 https www stmcu org cn document list index category 158 STM32的芯片上有两个管脚BOOT0和BOOT1 这两个管脚在芯片复位时的
  • 【NAS工具箱】Drop Path介绍+Dropout回顾

    前言 Drop Path是NAS中常用到的一种正则化方法 由于网络训练的过程中常常是动态的 Drop Path就成了一个不错的正则化工具 在FractalNet NASNet等都有广泛使用 Dropout Dropout是最早的用于解决过拟
  • 华为OD机试 - 最大社交距离(Java)

    题目描述 疫情期间需要大家保证一定的社交距离 公司组织开交流会议 座位一排共 N 个座位 编号分别为 0 N 1 要求员工一个接着一个进入会议室 并且可以在任何时候离开会议室 满足 每当一个员工进入时 需要坐到最大社交距离 最大化自己和其他
  • 第22章:python自动化——关键字驱动加Excel数据驱动案例

    目录 一 整个案例的要求 二 案例结构的设计 1 web keys py文件的内容 2 test data文件夹中excel测试用例数据准备 3 excel read py文件的内容 4 conf存放日志及其他的相关配置项 5 在main
  • scala判断类型

    isInstanceOf只能判断对象是否为指定类及其子类对象 而不能精确判断对象就是指定类的对象 如果要求精确的判断出对象的类型就是指定的数据类型 那么就只能用getClass和classOf来实现 对象 getClass可以精确获取对象的
  • 同学会后离婚观念的罪魁是什么?

    author skate time 2009 01 12 今天在网上看到这样一篇报道 老婆参加一次同学聚会 竟要离婚 现在的社会发展很快 可人们心理的适应能力没有跟上 换个角度想 这就是人的本性 不满足 就看自己怎么利用它 它是一把双刃剑
  • vscode的搜索技巧

    文章目录 vscode的搜索 搜索的方法 只搜索某些类型的文件 vscode在搜索的时候排除一些文件 vscode在搜索的目录中临时排除掉一些文件 在搜索中使用 ignore文件排除目录和文件 vscode的搜索 搜索的方法 只搜索某些类型
  • 第七周7.2搜索 课堂学习记录 搜索例子+选择排序+二分搜索《程序设计入门——C语言》第七期 浙江大学 翁恺

    1 搜索例子 include
  • python中文相似度_最准的中文文本相似度计算工具

    text2vec text2vec chinese text to vetor 文本向量化表示工具 包括词向量化 句子向量化 Feature 文本向量表示 字词粒度 通过腾讯AI Lab开源的大规模高质量中文词向量数据 800万中文词 获取
  • 数据中台外部演示脚本

    作为一个以产品 方案为主要核心的公司 公司员工本身对于产品一定是不陌生的 但是做产品演示光了解产品是不够的 需要自身对演示过程反复的练习 能够突出产品的亮点 要能够调动客户的兴趣 在演示产品的同时还需要对行业内其它相同的产品有所了解 在演示
  • Java学习13:面向对象-多态(Polymorphism)内存分析图解

    1 概述 多态是Java面向对象三大特征之一 多态 Polymorphism 顾名思义 即对象具有多种形态 具体而言 是编译时类型 运行时类型 编译时类型 由声明时的类型决定 一般是父类 运行时类型 由实际对应的对象类型决定 具体是哪个子类
  • 腾讯、阿里多位大佬共同推荐!封神级Python学习路线+核心知识点笔

    人工智能时代下 Python毫无疑问是最热的编程语言 有人夸它功能强大还上手轻松 有人说它学习曲线不那么陡峭 但是更多的人 在推开Python的大门后却发现 Python入门容易但精通却不易 你是否也曾傻傻分不清 列表 元组 字典 集合 等
  • mysql navicat 修改默认值_怎么在navicat中为datetime设置默认值

    在使用navicat设计表的字段时 是可以给字段设置默认值的 但是datetime类型类型的字段缺设置不了 下面我们就为大家详细解读一下这个问题 由于MySQL目前字段的默认值不支持函数 所以以create time datetime de
  • 2023面试问答-计算机网络

    OSI 的七层模型分别是 各自的功能是什么 简要概括 物理层 底层数据传输 如网线 网卡标准 数据链路层 定义数据的基本格式 如何传输 如何标识 如网卡MAC地址 网络层 定义IP编址 定义路由功能 如不同设备的数据转发 传输层 端到端传输
  • 【ES实战】ES中关于segment的小结

    文章目录 ES中关于segment的小结 ES中segment相关的原理 在Lucene中的产生segment的过程 Lucene commit过程 ES为了实现近实时可查询做了哪些 缩短数据可被搜索的等待时长 增加数据的可靠性 优化seg
  • mysql更新一张表的字段来自另一张表的某个字段

    UPDATE tba a LEFT JOIN tbb b on a id b id set a xxx b xxxx where a id b id
  • 对于opencv摄像头调用与现实方向相反的问题怎么解决?

    可以对原始图像进行水平翻转 使用opencv自带的flip函数 例如 读取图像帧 ret frame cap read 水平翻转图像 frame cv2 flip frame 1 这样就可以了 后面的参数1代表水平翻转图像 而0代表垂直翻转
  • node.js与elasticsearch交互

    参考elasticsearch 以下简称es 官方javascript的API https www elastic co guide en elasticsearch client javascript api 6 x api refere