mysql - 复杂的mysql搜索查询, 'boolean and'在mysql字符串上搜索关键字

标签 mysql

嗯,我需要在我的应用程序上实现一些搜索参数,并且无法提出任何更好的解决方案,所以我希望你们可以帮助我,我的问题是这样的->

我有一个包含以下列的表格,
ID,问题

现在我应该使用各种标准搜索关键字,例如->

  1. 如果我搜索关键字“心脏病”,返回的问题应包含“心脏”和“疾病”这两个词
  2. 像“We have a hearty drug”这样的句子会被返回,因为“heartly”包含“heart”,但像“We have a fooheart drug”这样的句子不会被返回,因为“foo”在“heart”之前,而这不是根据给定的标准, Not Acceptable 。但任何跟在“心脏”或“疾病”之后的东西都是可以接受的。

嗯,这些是给出的标准,我知道我的英语不是那么令人印象深刻,并且无法正确解释我的问题。但我确实希望有一个解决方案!谢谢!!

最佳答案

使用像 Lucene 这样的全文搜索引擎可能会更好,但你可以在 mysql 中完成。您只需根据单词数建立搜索条件即可。在许多情况下,这将是一个极其低效的查询。

类似的东西

select * from table
 where text like '% heart%' and text like '% disease%' 

Link to SQLFiddle

应该可以。

请注意,这不一定是完整的解决方案。不会返回以下值,因为疾病或心脏之前没有空格。

Diseases are bad.Hearts are very susceptible.  

当然,问题是您将不得不开始构建许多特殊情况。为了解决这些评论和我展示的示例,您必须添加以下规则:

select * from terms
 where (terms like '% heart%' or terms like 'heart%' or terms like '%.Heart%')
     and (terms like '% disease%' or terms like 'disease%' or terms like '%.disease%')

Link to more advanced case

您也可以使用某种正则表达式来做到这一点。这将处理您提出的案例。

select * from terms
 where (terms like 'heart%' or terms REGEXP '[ |\.]heart')
  and (terms like 'disease%' or terms  REGEXP '[ |\.]disease')

Example with regular expressions

关于mysql - 复杂的mysql搜索查询, 'boolean and'在mysql字符串上搜索关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370197/

相关文章:

mysql - 缓慢的 UNION 查询 - MySQL

python - Python3 中的 mysql select 返回先前更新的结果

mysql - 如何将另一列的整数值添加到日期列?

php - 将 Javascript 点击计数传递给 php

mysql - 如何仅为指定的多个id顺序更新订单字段的值?

mysql - 在MYSQL中如何获取每一行的最大计数?

php - phpMyAdmin 有查询语法检查功能吗?

php - 一次性将 MySQL 表行导出为单个文件(特别是 JSON)

php - 将 Docker 容器连接到远程 MySQL 数据库

mysql - 选择具有最大字符串长度的结果