拥有 50,000 种产品的网站的最佳搜索方法


Best search method for site with 50,000 products?

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

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

任何人都可以帮助了解在网站上搜索的最佳方法是什么?

MySQL的全文布尔搜索支持您想要搜索与所有单词匹配的文本的情况,就像您在它们之间使用了布尔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的全文搜索所缺乏的许多其他功能)。

  • Apache Solr
  • 狮身人面像搜索

在我的演示文稿全文搜索投掷中查看我的比较。

这里的困难在于,一个人的"完全无关紧要"可能是另一个人的"非常相关"。

我建议你使用MySQL的MATCH...AGAINSTORDER BY按降序对结果进行排序。使用 WHERE 子句可确保仅在匹配项返回结果> 0 时显示结果。这样,您将消除最不相关的产品(MATCH...AGAINST返回 0 的产品),但仍会显示甚至有些相关的产品。

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

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

我发现使用其中之一实际上可以改善您的索引结果,因为您可以在搜索工作时捕获 SEO 问题。

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