我試圖做一個基本的全文搜索我的MySQL數據庫匹配字符串 - 這裏是我使用的表:MySQL全文索引不帶通配符
表中刪除
任何投入將是讚賞,因爲我還沒有使用全文搜索前
感謝
編輯(或索引爲此事!):
我選擇使用FULLTEXT
,因爲LIKE
搜索的緩慢 - 這些運行會有很多,因爲它是一個JavaScript自動完成類型的東西。正在使用LIKE
是否可行?我被告知反對它。 (我提起這事,因爲所有的答案都表示使用LIKE
而不是解決我的實際問題)
我試圖做一個基本的全文搜索我的MySQL數據庫匹配字符串 - 這裏是我使用的表:MySQL全文索引不帶通配符
表中刪除
任何投入將是讚賞,因爲我還沒有使用全文搜索前
感謝
編輯(或索引爲此事!):
我選擇使用FULLTEXT
,因爲LIKE
搜索的緩慢 - 這些運行會有很多,因爲它是一個JavaScript自動完成類型的東西。正在使用LIKE
是否可行?我被告知反對它。 (我提起這事,因爲所有的答案都表示使用LIKE
而不是解決我的實際問題)
使用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%');
我認爲你試圖做這樣的事情:
select * from users where (
username like ('Sav%')
or email like ('Sav%')
or first_name like ('Sav%')
or last_name like ('Sav%'));
MySQL全文搜索功能有限,搜索速度相對較慢。我建議對這種類型的查詢使用外部全文搜索引擎,如Solr或Sphinx。我對Solr不熟悉,但在Sphinx的情況下,您可以在配置文件中僱用支持前綴索引以及enable_star選項。
以下是how to replace MySQL FT with Sphinx的示例。您也可以使用Sphinx進行分面搜索,相關文檔搜索和其他有用的東西。
希望這會有所幫助。
你在這裏混合你的隱喻。您希望使用FULLTEXT的理由很充分,那麼您使用LIKE的語法。
嘗試搜索沒有通配符的普通「savo」,看看是否可以接受。
BTW 2大陷阱與MySQL全文搜索:
它不會少於4個字母反應,而無需返回和搞亂與CNF(我認爲它的4所輸入,你需要檢查此)
如果結果集計數大於總可用行數的50%,則它表示搜索失敗,並且不返回任何內容。值得記住的是,只測試12行,並說他們都在其中有test
這個詞。哎喲;)
最小字長由MySQL配置文件中的ft_min_word_len選項控制,並可根據需要進行調整:http://dev.mysql.com/doc/refman/5.1/en/server-system-variables的.html#sysvar_ft_min_word_len – vfedorkov
我選擇使用,因爲'like'搜索假想緩慢的全文 - 會有一大堆的這些運行,因爲它是一個JavaScript自動完成類型的事情。你認爲使用'like'是一個可行的選擇嗎?我被告知反對它。 – Zen
爲每個將要搜索的列添加一個mysql索引。這應該有所幫助。我曾在小規模情況下使用'like'搜索自動填充而沒有問題。 – Teddy
問題是,您實際上無法在MySQL中創建索引,以便高效地處理多列「LIKE」查詢。這是MySQL在內部用於這些索引的B-Tree索引的限制。他們只能處理查詢中的一個範圍,如a = 5和b ='somestring'和c'LIKE'Sav%'。這意味着只有一個LIKE使用通配符可以被索引覆蓋,其他將被逐個過濾。您可以在EXPLAIN輸出中看到 – vfedorkov