2010-09-22 78 views
3

我需要使用全文搜索,但在我的web應用程序中使用的表使用INNODB引擎,從我讀的內容來看,JDBC不支持Mysql觸發器,我應該部署該課程服務器上的項目如此安裝工具,如獅身人面像是不可能的,有人可以請建議一種方法來執行全文搜索?使用InnoDB表進行全文搜索

感謝

編輯:該項目的要求是有一個一致的數據庫,關於這一點我要執行的搜索表包含存在於實驗室儀器針對我建立的Web應用程序的列表,可以向其中插入新的工具,但假設插入訪問很少,並且大多數表將用於讀取訪問,在這種情況下,使用MyIsam是合理的並且將符合一致性要求(Myisam不支持交易)?

回答

3

您可以使用MyISAM創建第二個表格,該表格僅包含主表格的主鍵以及您希望FULLTEXT搜索的文本內容。然後,當您想要進行全文搜索時,在適當的InnoDB表和搜索誘餌MyISAM表之間執行JOIN,對MyISAM表的條件爲MATCH

這也允許您將MyISAM表中的不同搜索誘餌文本存儲到InnoDB表中的「真實」文本中,該文本允許您實現MySQL的FULLTEXT引擎無法實現的干擾或特殊撇號/連字符處理等功能管理。

這裏的問題當然是保持MyISAM數據與InnoDB數據一致。您可以每隔一段時間運行一次作業來完成它,或者在有文本更新時讓應用程序寫入兩個表。無論哪種方式,希望您可以擺脫全文搜索中的不一致性,這對於「規範」表數據來說是不可接受的。

另一種方法是當您需要的全文解決方案不可用時,只需要回退到LIKE/RLIKE(正則表達式)匹配。將不可索引的速度如此之快,但至少它會一直工作,對於較小的數據庫來說沒問題。

編輯:

上,我要執行的搜索表包含存在於實驗室對此我構建Web應用程序

OK文書清單,是否真的必須是FULLTEXT可搜索?將這樣一個列表建模爲每種設備中的一個實體,以及實驗室和設備之間的連接表(或其它什麼)不是更好嗎?

所以如果2插入同時發生?

MyISAM不會讓兩個INSERT聲稱相同的主鍵。但這不足以保證一般情況下的「一致性」。雖然聽起來你可以從實際角度出發,但如果明確要求「一致性」,這可能正是他們不希望你做的。

+0

是的,他們建議我們使用FULLTEXT搜索,因爲每個儀器都有一個描述字段,這就是我們需要執行搜索的地方。 – Noona 2010-09-22 21:12:03

+0

我想我會遵循這個建議「你可以使用MyISAM創建第二張表,只包含主表的主鍵和你希望進行FULLTEXT搜索的文本內容,然後當你想做全文搜索時,你可以適當的InnoDB表和搜索誘餌MyISAM表之間的JOIN,以及對MyISAM表的MATCH條件。「 – Noona 2010-09-22 21:18:04

+0

我認爲如果我爲實驗室中不存在的儀器返回一個類型,這不是什麼大問題,因爲那是我們應該在搜索項上返回的。 – Noona 2010-09-22 21:26:11