将 elasticsearch 在 node 中应用实践。这次练习,使用的 express 框架,其实这个无所谓是哪个。
router.use("/query", require('./query'))
创建
query.js
const express = require("express");
const router = express.Router();
const queryController = require("../controller/queryController");
router.post("/create", queryController.create);
index(集合的名称)body(插入的数据)
exports.create = async (req, res) => {
client
.index({
index: "students",
type: "_doc",
body: req.body,
})
.catch((err) => console.error(err));
res.status(201).json({
msg: "success",
});
};
数据由前端通过请求发送过来。
在 apifox 中,创建接口文档
假设以下是我们需要发送的数据
点击发送
当 body 显示 success 时,表示数据插入成功。
在 dash.nasuyun.com/app/collect… 中,可以看到我们创建的集合以及数据。
删除整个集合
query.js
router.get("/deleteAll", queryController.deleteAll);
indexName(集合名称)
exports.deleteAll = async (req, res) => {
const { indexName } = req.query;
await client.indices.delete({ index: indexName });
res.status(200);
};
获取整个集合数据
一般来说,这种获取列表的接口,都是带有分页 + 排序功能的
这里,我们按照时间进行排序,排序的顺序由前端传入的参数决定。
exports.getList = async (req, res) => {
const { timeField, sort, page, size } = req.query
client.search({
index: "students",
body: {
sort: [
{
[timeField]: {
'order': sort
}
}
],
from: (page - 1) * size,
size: size
}
}).then((response) => {
res.status(200).json({
data: response.body.hits.hits
})
})
}
更改信息
query.js
router.post("/updateDocument", queryController.updateDocument)
id(文档中该条数据的id,每条数据插入时,都会为该数据生成一个唯一ID)
exports.updateDocument = async (req, res) => {
const { id, age, rt, db_type, version } = req.body;
client.update({
index: "students",
type: "_doc",
id,
body: {
doc: {
age,
rt,
db_type,
version
}
}
}).then((response) => {
res.status(200).json({ msg: 'success' })
}).catch((error) => {
console.error(error);
});
};