如何使用knexjs在PostgreSQL中搜索具有特殊字符的文本以及其他字符?

问题描述 投票:0回答:1

[我有一个包含旅馆的表。旅馆名称之一是d'spa。我已经实现了名称搜索。因此,如果用户搜索d'spa,他会找到合适的旅馆。

现在,如果用户搜索d.spa,d-spa或dspa,则用户应该找到正确的酒店d'spa

我的knexjs查询(不提供餐饮特殊字符问题:]

hotel = "d'spa"
knex.select('*').from('hotels').where({name:hotel})

我希望得到相同的结果

hotel = "d-spa" 
//or hotel = "d.spa" 
//or hotel = "dspa"
sql node.js postgresql full-text-search knex.js
1个回答
0
投票

您可以在SQL请求中使用正则表达式匹配,并用.?替换酒店名称中的所有非字母数字字符。

?表示重复上一个项目零或一次。

例如:

const hotelMatch = hotel.replace(/[\W]+/g, '.?')

然后执行regex request请求:

knex.select('*').from('hotels').where(knex.raw(`name SIMILAR TO ?`, [hotelMatch]))

/!\我没有测试代码,它只是一个示例/!\

© www.soinside.com 2019 - 2024. All rights reserved.