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

相关推荐
Yu_Lijing2 分钟前
MySQL进阶学习与初阶复习第四天
数据库·学习·mysql
大熊程序猿17 分钟前
net8.0一键创建支持(Orm-Sqlite-MySql-SqlServer)
数据库·mysql·sqlite
虚伪的空想家22 分钟前
记录es收集日志报错问题as the final mapping would have more than 1 type[XXX,doc]
大数据·elasticsearch·搜索引擎·容器·kubernetes·log-pilot
-SGlow-9 小时前
MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
linux·运维·服务器·数据库·mysql
Hello.Reader10 小时前
Go-Elasticsearch v9 安装与版本兼容性
elasticsearch·golang·jenkins
明月56610 小时前
Oracle 误删数据恢复
数据库·oracle
♡喜欢做梦11 小时前
【MySQL】深入浅出事务:保证数据一致性的核心武器
数据库·mysql
遇见你的雩风11 小时前
MySQL的认识与基本操作
数据库·mysql
dblens 数据库管理和开发工具12 小时前
MySQL新增字段DDL:锁表全解析、避坑指南与实战案例
数据库·mysql·dblens·dblens mysql·数据库连接管理
weixin_4196583112 小时前
MySQL的基础操作
数据库·mysql