2012-03-20 155 views
2

我理解LIKE結果和通配符等。我需要知道的是獲取頂部最相對的搜索結果的好方法。MySQL,PHP相對搜索結果/優化

例如: 我搜索「Front Brake CarModel」或類似的東西。

目前我用空格分解字符串並創建一個OR/WHERE狀態,因此查詢看起來像這樣。

SELECT * FROM table WHERE article_text LIKE '%Front%' OR article_text LIKE '%Brake%' OR article_text LIKE '%CarModel%' 

由於我的新手搜索技巧,這不是很好,因爲它會得到搜索詞中每個單詞的結果。我想要發生的是獲得結果,並與頂部找到的詞最多的文章進行排序。如果這是有道理的。

建議?

編輯:表是InnoDB類型,由於外鍵約束,不能更改類型。因此,消除了對我使用全文索引:(

+0

的可能重複[是全文搜索答案?(HTTP的能力:/ /stackoverflow.com/questions/614358/is-full-text-search-the-answer) – 2012-03-20 17:46:37

+0

@MarcusAdams不幸的是,我的表是InnoDB,不能改變類型,所以我不能使用FULLTEXT索引 – Tyler 2012-03-20 18:04:49

+0

那麼,爲什麼不創建一個只有搜索文本的新表,以及一個作爲MyIASM的「真實」表中的關鍵字? – 2012-03-20 18:07:46

回答

1

這可以很容易地與全文索引來完成

ALTER TABLE table ADD FULLTEXT INDEX `ft_search` (`article_text`); 

SELECT *, MATCH(article_text) AGAINST('Front Brake CarModel') AS score 
FROM table 
WHERE MATCH(article_text) AGAINST('Front Brake CarModel') ORDER BY score DESC; 
+0

這看起來很有希望,但它看起來似乎我使用的表不支持FULLTE XT索引。 「使用的表類型不支持FULLTEXT索引」 – Tyler 2012-03-20 17:55:37

+0

您沒有使用MyISAM引擎。很可能你的表是InnoDB。使用'ALTER TABLE表ENGINE = MyISAM'來更改引擎並重試。 – kba 2012-03-20 18:05:53

+0

如果您正在使用innodb表,而不是將表更改爲myisam,我通常只將全文索引所需的列移動到單獨的myisam表中。 – Rob 2012-03-20 18:18:36