node.js + @elastic/elasticsearch 操作elasticsearch数据库

我这边node.js 使用的是 koa2,elasticsearch是8.11.1版本

官网:https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/getting-started-js.html

一、@elastic/elasticsearch 连接 elasticsearch数据库

如果elasticsearch没有设置账号秘密 则auth就不需要了

const { Client } = require('@elastic/elasticsearch');
this.elastic = new Client({
  node: 'http://localhost:9200',
  auth: {
	    username: 'xm',
	    password: '123'  
    }
});

// 另一个写法
const elastic = new Client({
  node: 'https://username:password@localhost:9200'
})

二、基础操作

1、创建

1)创建一条信息

this.elastic.index({
 index: 'testes',
 id: '20240425-01',
  body: {
    name: 'xiaoming',
    age: 22
  }
})

创建一条信息,id不填 系统会自动补全

注意:index 只能是小写,不能大写,否则会报错,可以 'test-es'命名

2)批量创建

await this.elastic.indices.create({
 index: 'tweets',
  operations: {
    mappings: {
      properties: {
        id: { type: 'integer' },
        text: { type: 'text' },
        user: { type: 'keyword' },
        time: { type: 'date' }
      }
    }
  }
}, { ignore: [400] })
const dataset = [
 {
    id: 1,
    text: 'If I fall, don\'t bring me back.',
    user: 'jon',
    time: new Date()
  },
  {
    id: 2,
    text: 'Winter is coming',
    user: 'ned',
    time: new Date()
  },
  {
    id: 3,
    text: 'A Lannister always pays his debts.',
    user: 'tyrion',
    time: new Date()
  },
  {
    id: 4,
    text: 'I am the blood of the dragon.',
    user: 'daenerys',
    time: new Date()
  },
  {
    id: 5, // change this value to a string to see the bulk response with errors
    text: 'A girl is Arya Stark of Winterfell. And I\'m going home.',
    user: 'arya',
    time: new Date()
  }
]

const operations = dataset.flatMap(doc => [{ index: { _index: 'tweets' } }, doc])

const bulkResponse = await this.elastic.bulk({ refresh: true, operations })
const count = await this.elastic.count({ index: 'tweets' })
console.log(count)

等同于

await this.elastic.bulk({
  refresh: true,
  operations: [
    // operation to perform
    { index: { _index: 'game-of-thrones' } },
    // the document to index
    {
      character: 'Ned Stark1',
      quote: 'Winter is coming1.'
    },

    { index: { _index: 'game-of-thrones' } },
    {
      character: 'Daenerys Targaryen2',
      quote: 'I am the blood of the dragon2.'
    },

    { index: { _index: 'game-of-thrones' } },
    {
      character: 'Tyrion Lannister3',
      quote: 'A mind needs books like a sword needs a whetstone3.'
    }
  ]
});

根据官网来看,bulk其实就是批量操作,这里也可以 update、delete 等等

2、删除

1)删除单个

this.elastic.delete({
  index: 'testes',
  id: '20240425-01'
});

2)按条件删除,会删除符合条件的所有数据

this.elastic.deleteByQuery({
  index: 'tweets',
  query: {
    match: {user: 'tyrion'}
  }
})

3、更新操作

await this.elastic.update({
 index: 'tweets',
  id: 'QK5KE48BTvD5VO_sox9p',
  doc: {
    text: '111',
    user: '222'
  }
});
const document = await this.elastic.get({
  index: 'tweets',
  id: 'QK5KE48BTvD5VO_sox9p'
});

4、查询操作

1)单个查询,根据 index 和 id精准查询

const document = await this.elastic.get({
  index: 'tweets',
  id: 'QK5KE48BTvD5VO_sox9p'
});

2)查询所有,查询 index 为 testes 的所有数值

this.elastic.search({
  index: 'testes'
})

3)search 混合查询

GET /cartest/_search
{
 "size": 10,
 "from": 0,
 "query":{
    "bool":{
    "must":[
      {
        "match":{
          "say": "33333"
        }
      },
      {
        "regexp": {
          "name": ".*云.*" 
        }
      },
      {
        "range": {
          "num": {
            "gte": 120,
            "lte": 200
          }
        }
      }
    ]
   }
 }
}

具体查询大家可以看我这个文章:query 中的内容大致都是一致的

https://blog.csdn.net/weixin_44384273/article/details/137920183?spm=1001.2014.3001.5501

相关推荐
初晴~15 分钟前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
盖世英雄酱5813620 分钟前
InnoDB 的页分裂和页合并
数据库·后端
滚雪球~32 分钟前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语33 分钟前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
喝醉酒的小白1 小时前
Elasticsearch 配置文件
大数据·elasticsearch·搜索引擎
m0_748234522 小时前
前端Vue3字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin)
前端·webpack·node.js
YashanDB2 小时前
【YashanDB知识库】XMLAGG方法的兼容
数据库·yashandb·崖山数据库
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍11基于XML的SQL注入(XML-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw·xml注入
风间琉璃""3 小时前
bugkctf 渗透测试1超详细版
数据库·web安全·网络安全·渗透测试·内网·安全工具
drebander3 小时前
SQL 实战-巧用 CASE WHEN 实现条件分组与统计
大数据·数据库·sql