我一直在试图找到一些关于使用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”为例。
我已经读了一点关于创建关键字索引表,但还没有找到合适的参考。
是否有人可以提供一个解决方案,我可以使用产品搜索词(如乔公进入),这将使一套简明的结果。由于
你想'耐克西装低价优质复古'返回一些东西吗?另外,如果我理解正确,您希望匹配尽可能多的单词,并且不考虑通过全文计算的内置相关性,对吗? – Tchoupi
Mathieu - 感谢您的回复。我希望它能返回结果,但不能为每个关键字单独提供,因为它们有太多。我也对MATCH /相关性进行ORDER BY,并返回最佳结果。它产生的数字会随着我假设的关键词的数量而变化? –
相关性不仅取决于关键字的数量,而且取决于每个关键字的相关性:http://dev.mysql.com/doc/internals/en/full-text-search.html – Tchoupi