2012-09-11 82 views
0

我一直在试图找到一些关于使用MySQL的FULLTEXT搜索的帮助。我意识到这已被讨论为死亡,但我不能完全理解如何得到一组简明的结果。简明FULLTEXT搜索

我有说50万个产品上的“PRODUCT_NAME”表中的FULLTEXT索引设置的MyISAM表。

一个基本的查询是:

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执行搜索。这很有效,直到有人使用更具体的关键字进行搜索。一个真实世界的例子是搜索“耐克外套低保费复古”。在这种情况下,没有结果(而使用MATCH的第一种方法返回数以百计)

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

此外,由于这种被共享主机,我无法改变默认的最低字长 - 这意味着丢失的关键字,如“红色”或名牌“GAP”为例。

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

是否有人可以提供一个解决方案,我可以使用产品搜索词(如乔公进入),这将使一套简明的结果。由于

+0

你想'耐克西装低价优质复古'返回一些东西吗?另外,如果我理解正确,您希望匹配尽可能多的单词,并且不考虑通过全文计算的内置相关性,对吗? – Tchoupi

+0

Mathieu - 感谢您的回复。我希望它能返回结果,但不能为每个关键字单独提供,因为它们有太多。我也对MATCH /相关性进行ORDER BY,并返回最佳结果。它产生的数字会随着我假设的关键词的数量而变化? –

+0

相关性不仅取决于关键字的数量,而且取决于每个关键字的相关性:http://dev.mysql.com/doc/internals/en/full-text-search.html – Tchoupi

回答

0

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

目前,该“办法”已经与IN BOOLEAN MODE坚持(如马修还建议)。