0

我一直在尝试寻找有关使用 MySQL 的 FULLTEXT 搜索的帮助。我意识到这已经被讨论到死了,但我不太明白如何获得一组简洁的结果。

我有一个 MyISAM 表,其中包含 500,000 个产品,并在“product_name”表上设置了 FULLTEXT 索引。

一个基本的查询是:

SELECT * from products MATCH(product_name) AGAINST ("coffee table") AS relevance 
WHERE MATCH(product_name) AGAINST ("coffee table").

我得到了一份与咖啡或餐桌相关的数百种产品的清单。这不够具体,意味着有用的结果与太多其他项目混在一起。

我更改了查询以使用 MATCH 为每个结果提供相关性,然后使用 LIKE 执行实际查询。

SELECT * from products MATCH(product_name) AGAINST ("coffee table") AS relevance 
WHERE ((product_name like "%coffee%" AND product_name like "%table%") or product_name like "%coffee table%")

我从看到 Wordpress 如何执行搜索中得到这个想法。在有人使用更具体的关键字进行搜索之前,这种方法效果很好。一个真实的例子是搜索“Nike blazer low premium v​​intage”。在这种情况下,没有结果(而使用 MATCH 的第一个方法返回数百个)

我知道我可以使用 IN BOOLEAN MODE,但许多用户不知道使用 +/- 运算符来更改他们的查询。我还没有弄清楚我应该如何使用 HAVING 子句来限制结果。

此外,由于这是共享主机,我无法更改默认的最小字长 - 这意味着缺少关键字,例如颜色“红色”或品牌名称“GAP”。

我已经阅读了一些关于创建关键字索引表的内容,但还没有找到合适的参考资料。

有人可以提供一个解决方案,我可以使用产品搜索词(由 Joe Public 输入),这将给出一组简洁的结果。谢谢

4

1 回答 1

0

我做了更多的研究,正如许多人所说,对于像搜索这样的“人类”来说,这不是一个好的解决方案——一个例子是它如何处理单词复数(汽车/汽车)。我查看了 Apache Lucene,但它超出了我的设置和配置能力。

目前,“解决方案”一直是坚持IN BOOLEAN MODE(正如马修也建议的那样)。

于 2012-11-22T11:33:26.250 回答