回答
在我看來,最大的缺點是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全文索引
- 3. MySQL的全文索引
- 4. 全文搜索索引的大小會受到限制嗎?
- 5. mysql全文搜索作爲level2索引
- 6. MySql中的全文搜索索引?
- 7. MySQL全文索引搜索短話
- 8. Mysql全文索引搜索問題
- 9. MySQL全文索引搜索相關
- 10. mysql的全文檢索與多個全文索引
- 11. MySQL全文索引和常規索引搜索
- 12. mongoDB索引限制
- 13. 全文索引
- 14. 全文索引
- 15. 的MongoDB - 全文索引 - 全文檢索 - 制止
- 16. 如何查看MySql全文索引?
- 17. 具有全文索引的mysql視圖
- 18. MySQL全文索引不帶通配符
- 19. MySQL全文索引的查詢返回錯誤,創建索引
- 20. 索引文件大小限制
- 21. 全文搜索MYSQL
- 22. 全文搜索MySQL
- 23. mysql全文搜索
- 24. MySQL全文搜索?
- 25. MySql全文搜索
- 26. 全文搜索MySQL
- 27. MySQL - 全文搜索
- 28. mysql全文搜索
- 29. MySql的全索引搜索不工作
- 30. 全文索引vs %%和聚簇索引
您可以通過創建一個從屬機器來解決此問題。從機上的表格類型不必與主機匹配,這意味着您的innodb主機可以擁有一個全文搜索的myisam從機。 http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-diffengines.html – txyoji 2009-09-17 23:00:28