mysql - MySQL 中的全文搜索 - 多个搜索词、部分搜索词、带撇号、不带撇号

标签 mysql full-text-search multiple-columns apostrophe

我在允许用户输入的全文搜索中遇到问题:-

  • 多个搜索词
  • 多个部分条款
  • 用撇号搜索词
  • 不带撇号的搜索词

我的搜索适用于除一个实例之外的所有实例 - 当用户键入不带撇号的部分搜索词或完整搜索词时。

在数据库中,数据以 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/

相关文章:

postgresql - 使用 Postgres 全文搜索获取总命中数

java - 是否可以从 JavaSE 应用程序无缝连接到 000webhost.com 上托管的 MySQL 数据库?

mysql - 如何在 MySQL 查询中定义目标表?

php - 如何统计mysql中的唯一记录

search - 检查服务器状态时Elasticsearch 503错误

linux - awk、分割并打印一系列列

mysql - 在 DISTINCT 条件中选择 DISTINCT 列

sql-server-2005 - SQL 2005 全文目录是随机的 sloooowww

python - 从 Pandas 中的 DataFrame 中删除列的范围

python - Pandas 因可变列而失败