0

我有一个包含 3 个文本字段和一个 ID 的表。

该表仅用于根据用户搜索的相关性获取帖子 ID 的集合。

问题是我缺乏扭曲 SQL 连续体以获得所需结果所需的爱因斯坦智慧 -

SELECT `id` FROM `wp_ss_images` WHERE `keywords` LIKE '%cute%' OR `title` LIKE '%cute%' OR `content` LIKE '%cute%'
  • 这真的足以获得一个相关到最不相关的列表,还是有更好的方法?

当然数据库最多可以有 20k 行,我想保持它的效率。


这是一个更新-我已经走了全文路线-

例子:

SELECT `id` FROM `wp_ss_images` WHERE MATCH (`keywords`,`title`,`content`) AGAINST ('+cute +dog' IN BOOLEAN MODE);

然而,它似乎只是用任何单词抓取所有条目。我如何改进它以通过出现来显示相关性?

4

2 回答 2

1

要根据每个字段中关键字出现次数的相关性获取结果列表(意味着可爱首先出现在所有三个字段中,然后出现在其中 2 个字段中,等等),您可以执行以下操作:

SELECT id
FROM (
  SELECT id, 
    (keywords LIKE '%cute%') + (title LIKE '%cute%') + (content LIKE '%cute%') total 
  FROM wp_ss_images
  ) t
WHERE total > 0
ORDER BY total DESC
于 2013-07-14T00:49:58.393 回答
0

您可以连接比单独搜索更好的字段

SELECT `id` FROM `wp_ss_images` WHERE CONCAT(`keywords`,`title`,`content`) LIKE '%cute%'

不过,这对您问题的“最大到最小”部分没有帮助。

于 2013-07-14T00:44:25.300 回答