2012-10-18 61 views
1

我試圖做一個基本的全文搜索我的MySQL數據庫匹配字符串 - 這裏是我使用的表:MySQL全文索引不帶通配符

表中刪除

任何投入將是讚賞,因爲我還沒有使用全文搜索前

感謝

編輯(或索引爲此事!):

我選擇使用FULLTEXT,因爲LIKE搜索的緩慢 - 這些運行會有很多,因爲它是一個JavaScript自動完成類型的東西。正在使用LIKE是否可行?我被告知反對它。 (我提起這事,因爲所有的答案都表示使用LIKE而不是解決我的實際問題)

回答

2

使用LIKE命令,並使用百分號(%)作爲通配符:

SELECT user_id, username, first_name, last_name 
FROM users 
WHERE (username LIKE 'Sav%') 
    OR (email LIKE 'Sav%') 
    OR (first_name LIKE 'Sav%') 
    OR (last_name LIKE 'Sav%'); 
+0

我選擇使用,因爲'like'搜索假想緩慢的全文 - 會有一大堆的這些運行,因爲它是一個JavaScript自動完成類型的事情。你認爲使用'like'是一個可行的選擇嗎?我被告知反對它。 – Zen

+0

爲每個將要搜索的列添加一個mysql索引。這應該有所幫助。我曾在小規模情況下使用'like'搜索自動填充而沒有問題。 – Teddy

+1

問題是,您實際上無法在MySQL中創建索引,以便高效地處理多列「LIKE」查詢。這是MySQL在內部用於這些索引的B-Tree索引的限制。他們只能處理查詢中的一個範圍,如a = 5和b ='somestring'和c'LIKE'Sav%'。這意味着只有一個LIKE使用通配符可以被索引覆蓋,其他將被逐個過濾。您可以在EXPLAIN輸出中看到 – vfedorkov

-1

我認爲你試圖做這樣的事情:

select * from users where (
username like ('Sav%') 
or email like ('Sav%') 
or first_name like ('Sav%') 
or last_name like ('Sav%')); 
2

MySQL全文搜索功能有限,搜索速度相對較慢。我建議對這種類型的查詢使用外部全文搜索引擎,如SolrSphinx。我對Solr不熟悉,但在Sphinx的情況下,您可以在配置文件中僱用支持前綴索引以及enable_star選項。

以下是how to replace MySQL FT with Sphinx的示例。您也可以使用Sphinx進行分面搜索,相關文檔搜索和其他有用的東西。

希望這會有所幫助。

1

你在這裏混合你的隱喻。您希望使用FULLTEXT的理由很充分,那麼您使用LIKE的語法。

嘗試搜索沒有通配符的普通「savo」,看看是否可以接受。

BTW 2大陷阱與MySQL全文搜索:

  1. 它不會少於4個字母反應,而無需返回和搞亂與CNF(我認爲它的4所輸入,你需要檢查此)

  2. 如果結果集計數大於總可用行數的50%,則它表示搜索失敗,並且不返回任何內容。值得記住的是,只測試12行,並說他們都在其中有test這個詞。哎喲;)

+0

最小字長由MySQL配置文件中的ft_min_word_len選項控制,並可根據需要進行調整:http://dev.mysql.com/doc/refman/5.1/en/server-system-variables的.html#sysvar_ft_min_word_len – vfedorkov