2

我想为所有内容(或至少可搜索的内容)都存储在数据库中的网站构建站点范围的搜索。在不过度参与的情况下,我能想到的最好方法如下:

  1. 用户输入搜索查询-“棕色真皮沙发”。
  2. 将查询拆分为数组。
  3. 对数组的每一行使用 LIKE %$val% 搜索数据库 (mysql)。
  4. 将结果加载到数组中,然后为在内容中找到的搜索词的数量给每个结果 +1 分。
  5. 如果结果具有匹配数量的术语,则按特定页面的浏览次数排序 - 一个受欢迎程度的指标。

使用页面标题中的搜索词为结果赋予更多价值,或者允许用户通过使用引号来搜索多词短语,这不会太复杂。

除了性能考虑 - 限制返回的结果、缓存等,还有什么我需要考虑的或更好的方法来解决这个问题(除了实现谷歌搜索框)?

4

2 回答 2

1

不确定过度参与的阈值是多少,但我可能会首先搜索包含整个字符串数组的匹配项,然后调用您描述的方法。

考虑:将作为单独结果返回的两条内容。

结果1:

____ brown ____ ____ _____ ____ brown ____ ____ ______ ___ brown _____ ____ brown

结果 2:

brown leather sofas _____ _____ ______ ____ _____.

显然,我们希望将结果 2 作为最高结果返回,但是您的方法会为结果 1 分配更多“点”。

于 2012-06-28T14:10:26.693 回答
0

您是否考虑过全文搜索?它并不适用于所有情况,但可以帮助解决此类问题。

SELECT * 
FROM articles
WHERE MATCH (title, body)
AGAINST ('database' IN NATURAL LANGUAGE MODE);

不过请务必阅读文档,因为有一些有趣的陷阱可以吸引新用户,例如:

如果您创建一个表格并在其中仅插入一两行文本,则文本中的每个单词至少出现在 50% 的行中。因此,没有搜索返回任何结果。确保插入至少三行,最好更多。

于 2012-06-28T14:23:20.240 回答