0

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

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

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

4

3 回答 3

1

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 全文搜索所缺乏的许多其他功能)。

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

于 2013-09-30T15:43:58.170 回答
0

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

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

于 2013-09-30T15:26:59.753 回答
-2

If your site is well-managed in Google Webmaster tools and is already indexed, you can use a Google Custom Search Engine (CSE).

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

I've found that using one of these actually improves your indexed results because you catch seo issues while getting the search to work.

I would not recommend this as an overnight solution, but with a month or two of using it internally, could be your best bet.

于 2013-09-30T12:13:42.010 回答