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

时间:2013-09-30 12:11:04

标签: php mysql search

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

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

任何人都可以帮助您使用在网站上搜索的最佳方法吗?

3 个答案:

答案 0 :(得分:1)

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

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

但这只会搜索包含两个单词的文字,“自行车”这个词可能会出现在“山峰”之前,或者这两个单词可能被其他文字分开。

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

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-2)

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

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

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

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