基本的网站范围搜索方法?

时间:2012-06-28 13:26:07

标签: mysql search methodology

我想建立一个网站搜索网站,其中所有内容(或至少可搜索的内容)将存储在数据库中。在没有极度参与的情况下,我能想到这样做的最好方法如下:

  1. 用户输入搜索查询 - “棕色真皮沙发”。
  2. 将查询拆分为数组。
  3. 使用LIKE%$ val%为数组的每一行搜索数据库(mysql)。
  4. 将结果加载到数组中,然后为每个结果+1点指定内容中找到的搜索字词数。
  5. 如果结果具有匹配的术语数量,则按特定页面的观看次数排序 - 这是受欢迎程度的指标。
  6. 实现诸如在页面标题中使用搜索词给结果带来更多价值,或者允许用户使用引号搜索多词短语等事情并不会太复杂。

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

2 个答案:

答案 0 :(得分:1)

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

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

结果1:

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

结果2:

brown leather sofas _____ _____ ______ ____ _____.

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

答案 1 :(得分:0)

您考虑过Full Text Searching了吗?它并不适用于所有情况,但可以帮助解决这类问题。

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

请务必阅读docs,因为有一些有趣的问题可以吸引新用户,例如:

  

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