2011-04-11 50 views
1

我有一個句子,如the cat sat on the mat存儲爲單個sql字段。我想定期搜索不在停止列表中的關鍵字,在這種情況下,cat sat mat將它們存儲在SQL表中以便快速搜索的最佳方式是什麼?從一個句子中存儲有趣的單詞

至於我能看到它,我看到下面的選項

  1. 高達每行[n]的附加列,每一個字。
  2. 將所有有趣的單詞存儲在逗號分隔的單個字段中。
  3. 一個新表,與上述選項中的任何一個鏈接。
  4. 什麼也不做,每次搜索一個新的單詞時都要搜索匹配。

哪個是最佳做法,哪個搜索詞匹配最快?我在Python中使用sqlite,如果這有所作爲。

+0

我愛所有的答案。謝謝! – Toby 2011-04-12 18:16:59

回答

1

我會建議給你的句子一個關鍵,可能是身份。然後,我會創建一個鏈接到你的句子表的第二個表格,每行有一個有趣的單詞。

如果您想搜索以ca開頭的單詞,如果您以逗號分隔存儲了這些單詞,則必須通配符的開始和結束,而如果它們各自位於單獨的行中,則可以繞過開始的通配符。

另外,假設你在逗號分隔的列表中找到一個匹配項,你必須解析出哪個單詞實際上是一個命中。用第二張表格簡單地返回單詞本身。更不用說在一個字段中存儲多個值是關係數據庫中的主要禁忌的事實。

+0

這個規模會好嗎?我目前有大約80,000個句子可以分解,並且可以輕鬆地多一個數量級。 – Toby 2011-04-12 05:58:14

+0

我們需要知道表格將如何使用。我看不到任何縮放問題。當然你的桌子可能有幾百萬行,但取決於你如何做你的搜索這不應該是一個問題。如果您最終每次都使用'%%'進行搜索,那麼通過這項工作並沒有太多的意義。 – 2011-04-12 13:08:24

1

我也對SQLite做了類似的事情。根據我的經驗,在這種情況下它不像其他數據庫那麼快,所以支付儘可能簡單的架構是值得的。

  • 每行最多有[n]個附加列,每個字一個。
  • 將所有有趣的單詞存儲在逗號分隔的單個字段中。
  • 一個新表,與上述選項中的任何一個鏈接。
  • 什麼也不做,每次搜索一個新的單詞時都要搜索匹配。

如果您想要使用LIKE進行縮放和匹配,您的4個選項中的2)和4)可能會太慢。儘管使用全文匹配比較快,所以值得深入研究。 1)看起來是不好的數據庫設計,如果有更多的詞比列更多?如果少了,這只是浪費空間。 3)是最好的國際海事組織,如果你在他們自己的表格中使用主鍵,搜索速度應該是可以接受的快。

相關問題