【问题标题】:Mysql full text search particular word [closed]Mysql全文搜索特定单词[关闭]
【发布时间】:2013-03-20 08:27:26
【问题描述】:
tag1 - Novel, My pession, Holi, Book, My book, Having book
tag2 - Holi Novel, My pession, Book, My book, Having book
tag3 - Romantic Novel, My Novel, Book, My book, Having book
tag4 - Novel based, My Novel, Book, My book, Having book
tag5 - Ovel based, My Novel, Book, My book, Having book, Novel
tag6 - Based, My Novel, Book, Novel, Having book, Presume

我只想搜索那些带有Novel 的标签。应该是搜索 tag1tag5 在全文搜索中

【问题讨论】:

  • 如果你想要性能和可维护性,你真的应该考虑normalization
  • 是的,所以这里应该有三个表:booktagbook_tag,最后一个具有其他两个的外键。然后使用JOINs 以更快的方式执行此操作。
  • (由于没有细节,也没有证明先前的努力,因此被否决了。请花一些时间提出好的问题 - 经常这样做的做法无论如何都会向您揭示解决方案!)。

标签: php mysql


【解决方案1】:
WHERE
    tag1 REGEXP '(^|, )[[:<:]]Novel[[:>:]](,|$)' AND
    tag5 REGEXP '(^|, )[[:<:]]Novel[[:>:]](,|$)'

【讨论】:

  • 谢谢,但它正在搜索所有标签而不是标签1和标签5
  • @bhupendra,更新示例,猜测 tag1tag5 是列。
  • @bhupendra 你需要的SELECT * FROM table WHERE ( tags LIKE '%NOVEL,%' OR tags LIKE '% NOVEL%' OR tags LIKE '%,NOVEL %')
  • 感谢摆脱,但它也在搜索整个标签。
  • @bhupendra,已更新。仍在猜测您的数据库中发生了什么。
【解决方案2】:

SELECT * FROM your_table 像“小说”这样的主题

联合

SELECT * FROM your_table WHERE subject LIKE 'Novel,%'

联合

SELECT * FROM your_table WHERE 主题 LIKE '%,Novel,%'

联合

SELECT * FROM your_table WHERE 主题 LIKE '%,Novel'

【讨论】:

  • 谢谢,但它对我们的数据库来说太重了,因为我们有超过 20 个 Lacs。这个查询杀死了我们的查询并花费了 40 多秒。
【解决方案3】:

我通常以以下方式存储每个关键字

,Novel,My Passion,Holi, 

即逗号在字符串的开头和结尾,所以现在你可以在 LIKE 命令中搜索 '%,Novel,%' 而不是 Novel,它就像一个魅力。

【讨论】:

  • 我们不能这样做,因为我们无法更新 20 条 lacs 记录
  • 从您的示例中,它是简单的更新查询更新表集列=“,”+列+“,”并且记录格式良好。或作为其他评论者,您应该真正将其标准化以获得更快的结果。记住 TEXT 搜索是最慢的。
  • 我刚刚阅读了其他答案,您真的别无选择,只能根据我的经验听从我的建议:)。或者去规范化的方式。
  • @bhupendra,你可以这样做。更新所有记录需要很长时间,因此您可能会有一段停机时间,但这是正常化的下一个最佳选择。 LIKE 应该比 REGEXP 快很多。
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多