mysql - 使用参数sequelize全文查询

标签 mysql node.js express sequelize.js full-text-search

嗨,我目前正在尝试从数据库查询记录,这些是条件

  • 我从前端收到“order by”、“order (desc/asc)”、“limit”、“offset”
  • 我还需要使用 match...against 来搜索记录。 'like' 对于搜索来说太慢了。
  • 此查询有一个映射模型。

  • 所以我试过了
        let order_by = req.query.orderby;
        let order = req.query.order;
        let page = req.query.pagenum;
        let perpage = req.query.parpage;
        let searchword = req.query.foodsearch;
        let offset = (parseInt(page) - 1) * parpage;
    
        let foods = await models.food.findAll({
            limit: parseInt(perpage),
            offset: offset,
            order: [
                [order_by, order]
            ],
    
        //  where: Sequelize.literal
        //  (
        //      `MATCH 
        //      (Name, Place, RestoNum, Ingredient, ChefName, Region...) 
        //      AGAINST
        //      ( ? IN NATURAL LANGUAGE MODE)`, 
        //      { replacements: [ searchword ] }
        //  )
        });
    
    但是这段代码中的注释部分似乎是错误的。
    我尝试了原始查询,但后来我无法参数化这些 order by、order、offset、limit 变量。
    我不想像 ${orderby} 一样添加它们,因为它有风险。
    如果您对此问题有任何解决方案,请告诉我。
    先感谢您!

    最佳答案

    您混淆了 Sequelize.literal()sequelizeInstance.query() API。

  • .literal() only take a string 。如果您想在查询中使用对象表示法,您的注释代码将起作用。除了没有第二个论点。您需要将搜索词连接或插入到 AGAINST 子句中。 Also, don't forget your quotesliteral() 的输出本质上是一个字符串。您的 MySQL FTS 参数将需要正确类型的引号,就像它们出现在原始 SQL 查询中一样。
  • .query() DOES take an options parameter. 通过这个,你不必使用字符串插值, you can use named replacements or bound-parameters 。这不仅允许您放入 searchword 参数,还允许您放入任何您想要的 ORDER BY 子句。

  • 我会选择选项 1。这就是我们在 MS SQL 中为我们的 FTS 所做的。

    关于mysql - 使用参数sequelize全文查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63589623/

    相关文章:

    php - 如何显示所有记录分组依据

    php - 递归类别下的项目计数

    node.js - 如果我配置远程 Node.js 解释器,我还需要在本地安装 Node 吗?

    node.js - "cd ."中的 "cd . && npm install"有什么意义?

    javascript - Mongo 检查文档是否已存在

    Java MySQL 到 SQlite

    mysql - 当列必须满足多个值时如何选择行?

    android - 电话 - 如何进行设置以创建 PhoneGap 应用程序

    node.js - 从 azure blob Nodejs 下载文件

    node.js - 如何导入用于 Supertest 测试的路由?