我有一个全文搜索,允许用户的问题enter:-
多个搜索词
多个部分项
带撇号的搜索词
不带撇号的搜索词
我有搜索工作,但只有一个示例-当用户键在部分搜索项或完整搜索项没有撇号。
在数据库中,有使用bishop's stafford(带撇号)和bishops stafford(不带撇号)保存的数据,我需要在搜索名称时获取所有记录。
地名bishop's stafford,酒店,套房
如果用户在bishop's、hotel、suite或者任何版本的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 hotel、suite中输入密钥,或者实际上是没有撇号的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
由于数据集太大,我可以设置一个交叉引用表来指示哪些地名包含撇号,但如果我可以在搜索本身中解决这个问题,这是首选选项。
任何帮助都将不胜感激。
1条答案
按热度按时间ct3nt3jp1#
我的建议是对这两个查询使用联合操作。union还将自动删除重复项(您应该使用union all查看重复项)