我遇到了全文搜索问题,允许用户输入: -
除了一个实例之外,我有搜索工作 - 当用户键入部分搜索词或没有撇号的完整搜索词时。
在数据库中,有Bishop的Stafford(带撇号)和Bishops Stafford(没有撇号)保存的数据,我需要在搜索名称时获取所有记录。
地名Bishop's Stafford,酒店,套房
如果用户键入Bishop的S,酒店,套房或任何版本的包含撇号的Bishop's Stafford - 搜索将起作用
USE `waf-bit`;
SELECT townDetails FROM town_overview
WHERE MATCH(townDetails) against('+Bishop\'s S* +hotel +suite' IN BOOLEAN MODE)
OR MATCH(townDetails) against('+Bishops S* +hotel +suite' IN BOOLEAN MODE)
ORDER BY townDetails ASC LIMIT 50 OFFSET 0
然而,如果用户键入Bishops S酒店,套房 - 或者实际上任何版本的Bishops Stafford没有撇号 - 搜索将无效,它将找不到Bishop's Stafford与撇号的版本。
USE `waf-bit`;
SELECT townDetails FROM town_overview
WHERE MATCH(townDetails) against('+Bishops S* +hotel +suite' IN BOOLEAN MODE)
OR MATCH(townDetails) against('+Bishops S* +hotel +suite' IN BOOLEAN MODE)
ORDER BY townDetails ASC LIMIT 50 OFFSET 0
我不想使用LIKE
,因为数据集太大,我可以设置一个交叉引用表来指示哪些地名包含撇号但是如果我可以在搜索本身中修复这个是首选选项。
任何帮助将不胜感激。
我的建议是对这两个查询使用UNION操作。 UNION也会自动删除重复项(你应该使用UNION ALL来查看重复项)