多个搜索词,部分搜索词,带撇号,不带撇号

sz81bmfz  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(414)

我有一个全文搜索,允许用户的问题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 由于数据集太大,我可以设置一个交叉引用表来指示哪些地名包含撇号,但如果我可以在搜索本身中解决这个问题,这是首选选项。
任何帮助都将不胜感激。

ct3nt3jp

ct3nt3jp1#

我的建议是对这两个查询使用联合操作。union还将自动删除重复项(您应该使用union all查看重复项)

相关问题