首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Sequelize的MySQL FullText Search

问带Sequelize的MySQL FullText Search
EN

Stack Overflow用户
提问于 2016-08-24 20:40:43
回答 5查看 10.3K关注 0票数 12

我想用sequelize实现MySQL全文搜索。版本"sequelize":"^3.23.6“。我试图研究这一点,但没有找到指导如何实现这一点的文档。这是说明sequelize支持FullText的链接:https://github.com/sequelize/sequelize/issues/2979

但没有确切的文档说明如何使用sequelize进行全文搜索查询。

任何链接建议都会很有帮助

谢谢!

EN

回答 5

Stack Overflow用户

发布于 2018-04-18 22:00:24

因为我们现在在最近的Sequelize中有了错误消息,看起来像这样:

Unhandled rejection Error: Support for literal replacements in the where object has been removed.

解决方案将是手动提供替换

代码语言:javascript
复制
Payments.findAll({
  where: Sequelize.literal('MATCH (SomeField) AGAINST (:name)'),
  replacements: {
    name: 'Alex'
  }
});

对更复杂的条件使用数组:

代码语言:javascript
复制
Payments.findAll({
  where: [
    { State: 'Paid' },
    Sequelize.literal('MATCH (SomeField) AGAINST (:name)')
  ],
  replacements: {
    name: 'Alex'
  }
});
票数 10
EN

Stack Overflow用户

发布于 2016-08-28 20:51:29

Sequelize不完全支持全文搜索功能。我们可以像添加其他索引一样简单地添加全文索引。但是还没有实现支持MATCH (column) AGAINST (value)语法的运算符。

我目前对这个问题的解决方案包括创建一个常规模型:

代码语言:javascript
复制
module.exports = (sequelize, DataTypes) => {
  const Book = sequelize.define('Book', {
    title: DataTypes.STRING,
    description: DataTypes.TEXT,
    isActive: DataTypes.BOOLEAN
  }, {
    indexes: [
      // add a FULLTEXT index
      { type: 'FULLTEXT', name: 'text_idx', fields: ['description'] }
    ]
  });

  return Book;
};

并使用原始查询进行查询:

代码语言:javascript
复制
const against = 'more or less';

models.Book.find({
  where: ['isActive = 1 AND MATCH (description) AGAINST(?)', [against]]
}).then((result) => {
  console.log(result.title);
});

如果你试图搜索词形变化的单词,同义词等,那么只使用MySQL是不可能得到正确的结果的。MySQL开发人员考虑为全文搜索(https://dev.mysql.com/worklog/task/?id=2428)添加字典,但谁知道我们什么时候会看到它。

如果你一定要坚持使用MySQL,我建议你去看看Sphinx。它可以很好地处理同义词和屈折单词。

票数 9
EN

Stack Overflow用户

发布于 2018-05-07 18:40:29

因为序列化不支持fullText搜索。

下面是从表中搜索字符串的另一种方法

代码语言:javascript
复制
models.sequelize.query(
    "SELECT * FROM tableName WHERE CONCAT(field1, '', field2, '', field3, '', field4 ) LIKE \"%" + keyword + "%\"",
    {type: models.sequelize.QueryTypes.SELECT}).then(res => {
    
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39123631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档