在Sequelize中不起作用
我目前正在使用ExpressJS,PostgreSQL和Sequelize作为ORM的项目。 我开发了一个searchfunction,使查询按名称search项目:
models.foo.findAll({ where: { $or: [ {name: {$ilike: keywords}}, {searchMatches: {$contains: [keywords]}} ] }, order: [['name', 'ASC']] })
这工作正常,但如果名称包含特殊字符(如á,é,í,ó或ú),该查询将无法find它。
有没有办法使查询search名称与speacial字符在一个有意义的意义? 就像我search名字“马铃薯”的结果“马铃薯”,“大锅饭”和“我们是pótatóes”将出来,而不是“我们吃pátatos”(因为á!= o)
我终于find了有效的解决scheme。 首先,我创build了不起眼的扩展:
create extension unaccent;
然后,我只是使用原始查询(我无法弄清楚如何使用Sequelize的方式来构build查询),如下所示:
models.sequelize.query( `SELECT * FROM "Foos" WHERE unaccent("name") ilike unaccent('${keywords}') OR "searchMatches" @> ARRAY[unaccent('${keywords}')]::VARCHAR(255)[] ORDER BY "name" ASC`, {model: models.Foo})
它的工作原理!
字典可能是你在找什么。 基本上可以用来映射同义词,并排除索引中的常见元素(例如,来自英文文本的“a”和“the”)等等。
https://www.postgresql.org/docs/current/static/textsearch-dictionaries.html
- main.js:295 DELETE http://127.0.0.1:8081/messages/:0 405(方法不允许)在Javascript中
- 从电报信息中获取message_id – node.js
- 错误:没有指定默认引擎,也没有提供扩展名。 在浏览器中
- 使用app.set('app_secret',data)将密钥存储在nodejs中是否安全?
- 关系不存在 – JugglingDB与Postgres适配器中的错误
- 如何利用Heroku的“postdeploy”脚本在预置的Heroku PostgreSQL数据库中创build表?
- npm通知创build了一个lockfile作为package-lock.json。 你应该提交这个文件
- 如何在页面加载中使用Javascript成功完成Ajax请求
- 调用函数并通过express.js传递callback
- 如何debuggingnode.js导致100%的CPU使用率?
- 使用pg-promise查询多对多关系的最佳方法