| 12345678910111213141516171819202122232425262728293031323334353637383940 | // routes.jsconst express = require('express');const router = express.Router();// 数据库连接配置const psqlDB = require("../../../psql.service");// 计算余弦相似度的 SQL 查询const cosineSimilarityQuery = `    SELECT "objectId","story","pageContent",(1 - (vector_array::vector <=> $1::vector)) AS similarity    FROM (        SELECT *,             (SELECT array_agg(value::float)                 FROM jsonb_array_elements(vector512) AS value) AS vector_array        FROM "Document"        WHERE ($2 IS NULL OR story = $2)    ) AS subquery    ORDER BY similarity DESC    LIMIT 20;`;// POST 路由处理router.post('/retrive', async (req, res) => {    const { search, vector512, story } = req.body;    if (!Array.isArray(vector512)) {        return res.status(400).json({ error: 'Invalid input' });    }    try {        const result = await psqlDB.any(cosineSimilarityQuery, [vector512, story]);        res.json(result);    } catch (error) {        console.error('Database query error:', error);        console.error(error)        res.status(500).json({ error: 'Database query error' });    }});module.exports = router;
 |