php - 搜索多个值,按相关性排序(php + MySQL,无全文搜索)

标签 php mysql performance search search-engine

我有一个表格,其中包含我想要搜索的标题和关键字列。我想添加使用多术语搜索的功能,但它肯定应该按相关性对结果进行排序。 FullTextSearch 不是一个选项,因为我目前使用的是 MySQL5.5 和 innoDB。

我目前的方法如下:

  1. 我单独搜索每个术语并将匹配的 ID 存储在 PHP 数组中。
  2. 搜索完所有字词后,我会计算 id 出现次数并进行相应排序。

我现在想知道是否有更有效的方法来做到这一点,因为我主要使用 php 来实现这一点。我应该在数据库中进行一些处理吗?我应该彻底改变我的方法吗?

该表相对较小(少于 10k 条记录),我预计它在不久的将来不会变得更大。

有什么建议吗?谢谢。

最佳答案

您可以在 SQL 中进行计数。这是一个例子:

select ((col like 'term1') +
        (col like 'term2') +
         . . .
        (col like 'termN')
       ) as NumMatches
from t
having NumMatches > 0
order by NumMatches desc;

MySQL 将 bool 值视为 0(表示 false)和 1(表示 true)。您可以将它们加在一起以获得匹配的总数。

关于php - 搜索多个值,按相关性排序(php + MySQL,无全文搜索),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221869/

相关文章:

mysql - 复杂搜索 SQL 查询

php - 插入新信息查询

MySQL/PHP 查询性能?

c++ - Valgrind 是否有像 Purify/Quantify 这样的 API 可以让你禁用数据记录?

python - 为什么使用参数会使这个函数慢得多?

PHP - 查找最大值/最大值

php - 如何从 WooCommerce 产品页面上的面包屑中删除产品类别

php - 如何删除 Symfony2 中的服务定义?

mysql - PHP5-FPM 和 MYSQL

mysql - 如果一个或另一个或两个字段匹配,如何返回 SQL 查询