赞
踩
我这边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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。