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

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值