0

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

我有一个包含以下列的表格,
id,question

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

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

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

4

1 回答 1

1

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

就像是

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

链接到 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%')

链接到更高级的案例

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

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

正则表达式示例

于 2013-06-28T17:27:12.583 回答