回答
在我看來,最大的缺點是MySQL全文索引僅限於MyISAM表。與InnoDB表格相反,這些表格缺少很多重要的功能,例如交易。
對於大型表格,您需要在MySQL配置文件中增加緩衝區大小和緩存限制。
此外,您在搜索中使用的MATCH()列需要與索引中的列相同。
它不可能是沒有問題...
這當然不是!
任何純粹由被阻止的單詞組成的搜索詞都會默默地失敗。由於最小/最大長度限制和/或停用詞文件,可能會阻止單詞。
我發現默認的停用詞文件過於激進,它阻止了許多有效的搜索。此外,默認的最小長度爲4的遊戲經常會出現人們可能想要搜索的縮略詞。我將ft_min_word_len減少到3並完全刪除了停止列表(ft_stopword_file ='')。 Doc:http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html
您也可以檢查搜索查詢以查看它是否僅包含< 4個字母的單詞,並且在這種情況下回退到LIKE搜索。沒有這樣簡單的方法來在應用程序級別避開停止列表。
'單詞字符'的選擇可能無法滿足您的需求,而且更改很棘手。例如,搜索「Terry」不符合「Terry's」。一般來說,不支持任何形式的詞幹,所以「餅乾」也不會與「餅乾」相匹配。
最後,正如cg提到的,InnoDB不支持。在這個時代,你不希望把所有的數據放在MyISAM表中。
如果您有足夠的存儲空間,您可以將主要規範版本的數據放在InnoDB表中,然後創建一個單獨的MyISAM表,其中包含純文本內容的副本,純粹用於作爲searchbait。您必須更新這兩個表上的更改,但是如果MyISAM表失去完整性,那麼至少您只能失去搜索相關行的能力,而不是暴露實際的實時數據並獲取應用程序錯誤。
然後,如果您有空閒的週期,可以在searchbait上實現自己的文本處理並查詢單詞以解決上述某些限制。例如,您可以轉義想要成爲單詞字符的字符,刪除不想成爲單詞字符的字符,並執行簡單的手動英語詞幹。
除了bobince的很好的回答,還有一篇關於全文限制的MySQL文檔。希望這可以幫助。 http://dev.mysql.com/doc/refman/5.0/en/fulltext-restrictions.html(Olafur Waage談到了其中之一)
- 1. MySQL的全文索引
- 2. mysql全文搜索作爲level2索引
- 3. MySQL全文索引搜索短話
- 4. MySQL全文索引搜索相關
- 5. Mysql全文索引搜索問題
- 6. MySql中的全文搜索索引?
- 7. mysql的全文檢索與多個全文索引
- 8. MySQL全文索引和常規索引搜索
- 9. mongoDB索引限制
- 10. 全文索引
- 11. 如何查看MySql全文索引?
- 12. MySQL全文索引找不到指數
- 13. 全文搜索MySQL
- 14. MySql全文搜索
- 15. mysql全文搜索
- 16. 全文搜索MYSQL
- 17. mysql全文搜索
- 18. MySQL全文搜索?
- 19. MySql的全索引搜索不工作
- 20. Cancan nested_routes限制訪問權限:索引
- 21. MySQL文本索引
- 22. 文本搜索Mysql索引
- 23. Mysql全文索引搜索返回奇怪的結果
- 24. MySQL的 - 全文索引搜索問題在我的數據庫
- 25. 如何從PHP中檢索MySql全文索引信息?
- 26. MYSQL全文索引搜索,無法讓我的頭圓它
- 27. 試圖強制索引MYsql
- 28. MySQL十進制索引號
- 29. 使用MySQL索引純文本文件。使用MySQL的全文索引或增加你自己的?
- 30. 全文搜索查詢mysql
您可以通過創建一個從屬機器來解決此問題。從機上的表格類型不必與主機匹配,這意味着您的innodb主機可以擁有一個全文搜索的myisam從機。 http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-diffengines.html – txyoji 2009-09-17 23:00:28