我在允许用户输入的全文搜索中遇到问题:-
- 多个搜索词
- 多个部分条款
- 用撇号搜索词
- 不带撇号的搜索词
我的搜索适用于除一个实例之外的所有实例 - 当用户键入不带撇号的部分搜索词或完整搜索词时。
在数据库中,数据以 Bishop's Stafford(带撇号)和 Bishops Stafford(不带撇号) 保存,我需要在搜索名称时获取所有记录。
对于地名Bishop’s Stafford, hotel, suite
如果用户键入 Bishop’s 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 来查看重复项)
关于mysql - MySQL 中的全文搜索 - 多个搜索词、部分搜索词、带撇号、不带撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52311016/