零基础入门 elasticsearch (简单的CURD)

110 阅读1分钟

将 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 中,创建接口文档

image.png

假设以下是我们需要发送的数据

image.png

点击发送

image.png

当 body 显示 success 时,表示数据插入成功。

dash.nasuyun.com/app/collect… 中,可以看到我们创建的集合以及数据。

image.png

删除整个集合

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);
};

image.png

获取整个集合数据

一般来说,这种获取列表的接口,都是带有分页 + 排序功能的

这里,我们按照时间进行排序,排序的顺序由前端传入的参数决定。

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
    })
  })
}

image.png

更改信息

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);
  });
};