2013-02-23 25 views
3

正打算在python(python3)中創建一個簡單的搜索引擎。通過sqlite fts3/fts4的文檔,由於全文搜索速度很快,因此它成爲我選擇存儲文檔的選擇。我已經有一組網頁,其文本被提取並保存在文本文件中。
因此,我打算創建FTS4表方式如下:
sqlite中的信息存儲fts3/fts4

conn = sqlite3.connect('/home/xyz/exampledb.db') 
c = conn.cursor() 
c.execute("CREATE VIRTUAL TABLE mypages USING fts4(docid, name, content)")


那麼我會遍歷文本文件,其存儲在一個字符串,與名稱一起插入這個字符串到FTS表和docid(從1到n的整數,其中n是總文檔)
但是sqlite文檔中的以下語句讓我感到困惑,並且不確定我的上述代碼是否可用:
虛擬表是外部存儲的接口或計算引擎似乎是一個表,但實際上並沒有將信息存儲在d中數據庫文件。

那麼信息將被存儲在哪裏?如果它是一個常規的sqlite表,我會先創建一個數據庫文件並在這個數據庫文件中創建表。如果我必須在另一臺機器上使用相同的數據庫,我會簡單地複製這個文件並粘貼在那臺機器上。我可能在文檔中遺漏了一些東西,但我想清楚在我實現它之前如何存儲信息。

回答

1

來自文檔的聲明有點誤導;虛擬表本身不會在數據庫中存儲數據,但實現虛擬表的引擎可能會選擇使用其他表來存儲數據。

爲FTS會發生什麼情況在文檔的section 9.1說明:

對於每個FTS虛擬表在數據庫中,將創建三至五個真實(非虛擬)表來存儲的基礎數據。這些真正的表被稱爲「影子表」。真正的表名爲「%_content」,「%_segdir」,「%_segments」,「%_stat」和「%_docsize」,其中「%」由FTS虛擬表的名稱替換。

+0

按照我的計劃,我有權抓取網頁的客戶機,並從pages.But最終存儲中提取文本是在我的服務器上,所以我的選擇是要麼在這些機器上創建臨時表FTS,然後將其傳送到服務器(從便攜式硬盤傳輸),將此臨時表與主FTS表合併或將這些文本文檔傳輸到服務器,然後使用這些文檔更新主FTS表。接着通過上述文檔,我覺得創建成本太高臨時表然後合併它,因爲合併比使用文檔更新需要更多的時間。 – user2078134 2013-02-23 15:54:19