【问题标题】:MySQL Search Phrase or Part of the Phrase [duplicate]MySQL搜索短语或部分短语[重复]
【发布时间】:2015-12-24 08:19:29
【问题描述】:

我已经建立了快速搜索引擎来在 MySQL 数据库中查找产品,但我遇到了以下问题:

我们以这款产品为例:“iPhone 6S (128GB) Neverlocked”

如果我搜索“iPhone 6”,我会得到正确的结果。如果我搜索“iPhone Neverlocked”,它不会显示任何结果。如果我执行“iPhone 128 6S”,也不会出现任何结果。

我当前使用的代码是:

$query = "SELECT * FROM ads WHERE lower(CONCAT(title, '', description)) LIKE lower('%$keywords%')";
$result = mysql_query($query) or die(mysql_error());

我能做些什么来解决这个问题?

【问题讨论】:

  • 你使用较低的功能
  • 是否可以选择使用 FULLTEXT 索引以便您可以使用 MATCH?
  • 您还应该在您的问题中提出建议,您认为可以解决什么问题以及为什么无法将其转换为代码。那会让你的问题更清楚。否则,您编写了一些代码并且它不起作用只是主观的,因此您有想法让其他人为您编写它。这没什么用,尤其是对于该问题的未来访问者而言。您是否搜索过其他用户如何询问如何使用 Mysql 和 PHP 进行单词或关键字搜索?

标签: php mysql


【解决方案1】:

不使用下级功能:

$query = "
SELECT *, LOWER(CONCAT_WS(title,description)) AS concatenated 
WHERE concatenated LIKE LOWER('%iPhone Mobiles Access%')";

并检查差异:

$query = "
    SELECT *, LOWER(CONCAT_WS(title,description)) AS concatenated 
    WHERE concatenated LIKE LOWER('%iphone mobiles access%')";

您也可以通过使用此查询

COLLATE UTF8_BIN

我建议使用 mysqli_ 因为 mysql_ 已被弃用。

【讨论】:

  • 不使用lower函数,如果搜索简单的“iphone”关键字并且标题中包含“iPhone”,则不会显示结果。
  • 你有什么想法匹配查询
  • 只看手册就找到了。我认为 MATCH 是解决方案,而不是 CONCAT。
  • 是的,但是如果你只需要简单的搜索而不是使用匹配来对抗它的成本比喜欢任何方式回答更新请尝试
  • 我用过的全 texg 搜索有 3 种方式,很简单 LIKE, MATCH AGAINST, SPHINX
【解决方案2】:

这应该可行:

$keywords = str_replace(" ","|", $keywords);
$query = "SELECT * FROM ads 
        WHERE CONCAT(title, '', description) REGEXP '$keywords'";

【讨论】:

  • 试过了,但是当我搜索 iPhone Neverlocked 时没有显示任何结果,它应该显示 iPhone 6S (128GB) Neverlocked
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2012-10-29
相关资源
最近更新 更多