【问题标题】:Best search method for site with 50,000 products?拥有 50,000 种产品的网站的最佳搜索方法?
【发布时间】:2026-01-17 21:25:01
【问题描述】:

我有一个新网站,列出了大量产品,使用 php 构建并使用 mysql 数据库。

我们需要像其他大型网站一样进行搜索,例如,在搜索“山地自行车”时选择标题中包含“山地自行车”的产品 - 仅在搜索输入的术语。我在一个较小的网站上使用了 AGAINST 匹配,它在那里工作得很好,但是由于每个单词都是单独搜索的,在这种情况下,由于数据库中的数量,它可能会带来大量不相关的产品。

谁能帮忙看看在网站上搜索的最佳方法是什么?

【问题讨论】:

  • 当您使用LIKE 'mountain bike%' 时,它会在mountain bikes 上产生命中
  • 最佳搜索方法?阿帕奇索尔。如果您只想坚持使用 MySQL,也许可以选择全文搜索(尽管它会比基于 Lucene 女神的 Solr 更慢且精度更低)。
  • 不是像我提到的那样使用 MATCH AGAINST 等进行全文搜索吗?这不会单独搜索每个单词,然后会显示任何标题包括“山”或“自行车”的产品吗? stUrb,我的意思是 LIKE '%mountain bikes%' 不会提出名为 'mountain bike' 的产品,除非有办法改变它?
  • 请注意,搜索“站点”和搜索“数据库”不一定是一回事。

标签: php mysql search


【解决方案1】:

如果您的网站在 Google 网站管理员工具中得到良好管理并且已经被索引,您可以使用 Google 自定义搜索引擎 (CSE)。

https://www.google.com/cse/

我发现使用其中一种方法实际上可以改善您的索引结果,因为您在使搜索正常工作的同时发现了 seo 问题。

我不建议将其作为一夜之间的解决方案,但在内部使用一两个月,可能是您最好的选择。

【讨论】:

  • 这有什么关系? OP 正在讨论在 MySQL 数据库中搜索数据——并且不是搜索引擎。所以,我看不出 GWT 会有什么帮助。
  • Google 会抓取您的网站,并且可能会为您的网站提供比标准 MySQL 搜索更好的搜索功能。
  • 对不起,它不能使用谷歌,因为我需要允许用户更改结果的排序顺序等
  • CSE?真的吗?不,我必须同意阿迈勒的观点。我很确定我们不是在谈论搜索引擎。
  • 您必须阅读整个上下文、问题描述和答案,而不是按问题标题。
【解决方案2】:

这里的困难在于一个人的“完全不相关”可能是另一个人的“非常相关”。

我建议你使用 MySQL 的 MATCH...AGAINSTORDER BY 以降序排列结果。使用WHERE 子句确保您只显示匹配返回结果 > 0 的结果。这样您将消除最不相关的产品(那些MATCH...AGAINST 返回 0 的产品),但仍然显示甚至有些相关的产品。

【讨论】:

    【解决方案3】:

    MySQL 的全文布尔搜索支持您要搜索与所有单词匹配的文本的情况,就好像您在它们之间使用了boolean AND

    WHERE MATCH(product_description) AGAINST ('+mountain +bikes' IN BOOLEAN MODE)
    

    但这只会搜索包含两个单词的文本,单词“bikes”可能出现在“mountain”之前,或者这两个单词可能被其他文本分隔。

    找到行子集后,您可以使用未优化的谓词进一步细化它以搜索确切的短语。您可以希望“误报”不会造成过多的额外工作。

    WHERE MATCH(product_description) AGAINST ('+mountain +bikes' IN BOOLEAN MODE)
      AND product_description LIKE '%mountain bikes%'
    

    您还可以使用其他更灵活的文本搜索工具,它们能够搜索短语(以及 MySQL 全文搜索所缺乏的许多其他功能)。

    在我的演示文稿中查看我的比较Full Text Search Throwdown

    【讨论】:

      最近更新 更多