2010-05-15 40 views
1

我想開發一個複雜的文本搜索引擎。 我有很多書籍的數千個文本頁面。 我需要搜索包含指定複雜邏輯標準的頁面。 這些標準幾乎可以包含任何以下幾點:具有邏輯合併函數的正則表達式與索引的SQL

答:完整的單詞。 B:詞根(半詞與詞幹;即具有某些關鍵字母的所有詞)。

C:Word模板(在某些語言中,根填充在特定模板中以形成各種詞類,例如adjactives,過去/現在動詞...)。 D:邏輯連接:AND/OR/XOR/NOT/IF/IFF和括號來表示優先級。

現在,將數據庫中的頁面全文(未編入索引)並使用SQL和正則表達式搜索全部文本會更快嗎?

或者構建word/root/template-page-location元組的索引會更好嗎? 因此,我們可以加強搜索單個詞/根/模板。 但是,當我們在查詢中引入邏輯連接詞時,它會變得棘手。 我想在這種情況下執行以下步驟:

1:單獨搜索指定查詢中的每個單獨的單詞/根/模板。

2:在優先基礎上,將同時合併兩個結果列表(步驟1)depedning的邏輯運算符

例如,如果我們正在尋找「他與(是或曾經是)」:

1:我們將搜索「他」,「是」和「是」分開,並獲得每個單詞的結果列表。

2:使用合併函數OR-MERGE合併「is」和「was」的結果列表。

3:使用合併函數AND-MERGE將OR-MERGE函數的合併結果列表與「he」合併結果列表合併。

然後,作爲指定查詢的結果返回步驟3的結果。

你認爲gurues是什麼?哪個更快?任何更好的想法?

謝謝大家提前。

回答

1

有很多現成的解決方案來解決這類問題。我強烈建議你使用其中一種,而不是自己開發。

你不說你正在使用什麼數據庫解決方案。如果它是Microsoft SQL Server,則可以使用其功能Full Text Search。如果是MySQL,請看看它的Full-Text Search Functions。我確信Oracle,DB2和任何其他主要的DBMS都具有類似的功能。

或者,看看Apache的Lucene for JavaLucene for .NET。這將允許您索引文檔而無需使用DBMS。

+0

謝謝您的時間來回答我的問題。我發現使用Oracle的BerkeleyDB合併二進制搜索性能的功能更加可行。我的決定是因爲阿拉伯語所需的支持非常複雜,而且我無法研究全文數據庫。 – geeko 2010-05-24 04:01:02