【发布时间】:2013-01-09 19:51:39
【问题描述】:
我正在努力创建一个系统,以允许用户上传项目并向它们添加“标签”,以帮助它们在搜索中可见。目前,我有一个这样工作的数据库:
id|title|tags
其中tags 是用户自己输入的以逗号分隔的标签列表。我读过这是一种糟糕的方法,但是拥有一个标签表并将每个 ID 与项目记录一起存储基本上是一样的。
如何运行搜索以首先返回最相关的结果?我目前正在使用它,它有效,但不按相关性排序:SELECT * FROM items WHERE tags LIKE '%$tag%' LIMIT 0,20"; 其中$tag 只是一个标签,没有逗号(它在循环内)。
【问题讨论】:
-
... is basically the same thing...,直到您必须按相关性排序、按特定标签排序、一次搜索多个标签或性能不佳并向字段添加索引。 -
你如何定义相关性?您的查询中没有 order by,因此它只是按照您的主索引(通常是主键)的顺序返回记录。即使您将其拆分为表格,您仍然需要定义相关性。
-
@Sam 我将相关性定义为与项目匹配的标签数量。如果用户在搜索中键入 3 个标签,并且结果中的一个项目包含所有 3 个标签,我希望那个是第一个,而不是按照它们在数据库中的顺序。