2012-09-11 136 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堅持(如馬修還建議)。