简明的FULLTEXT搜索

时间:2012-09-11 14:14:07

标签: mysql search full-text-search myisam

我一直在尝试使用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输入),它将提供简明的结果集。感谢

1 个答案:

答案 0 :(得分:0)

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

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