2011-12-08 165 views
2

我有一個字典(以sql表格的形式),包含手機的型號和關於手機的文章(或只是一行)(以php或C中的字符串形式)。我想找出那篇文章中討論的手機型號,但我不想進行強力搜索,即逐個搜索文本中的每個型號名稱。字典搜索

此外,我正在考慮維護整個字典的哈希表,然後嘗試匹配文章中的每一項工作的哈希值,然後查找衝突。但是由於字典非常大,這種方法的內存開銷太大。

另外,如果根本沒有數據庫,即我們只有語言範圍內的所有內容,以字符串形式表示數組和字符串形式的字典。

+0

爲什麼你在標籤中有「c」? –

+0

我知道C語言和PHP語言,並在其中任何一種中尋找解決方案。 – Coddy

回答

1

您肯定需要在您的文章字段上使用FULLTEXT索引,並使用MATCH/AGAINST執行搜索以執行搜索。

SELECT * FROM your_table MATCH('phonemodel') AGAINST ('article'); 
+0

這種方法即使在字符串很小即僅行的情況下也是有效的。 – Coddy

+0

是的。 MySql使用適當的數據結構來存儲FULLTEXT索引,並且在這樣的數據結構中搜索非常有效。 – ioseb

+0

好的..多數民衆贊成在罰款,如果我有數據庫本身的每一件事情,以及如果沒有數據庫呢。我也會更新這個問題。 – Coddy

1

Inverted index會有幫助。鏈接:Inverted index

將您的文章分成標記,過濾標記的模型名稱。所以你可以建立一個索引,索引的關鍵是模型名稱,索引的值是一個文章列表。

也許你可以添加一些額外的信息,如文章中出現的模型名稱的位置。

0

如果您想使用C並且性能是您的願望。我會建議爲文章中的所有單詞建立一個trie(http://en.wikipedia.org/wiki/Trie)。它比散列快一點,消耗的內存少於Dictionary。

這不容易在c中實現,但我相信你可以找到一個準備就緒的地方。

好運(:

0

如果你有大量的數據,然後使用其中的一個 -

  1. Sphinx
  2. Lucene

特里/ DAWG(向非循環詞圖)是優雅的解決方案也難以實現&的維護。而且,MySQL FULLTEXT搜索很好,但不適合大數據。