2011-12-08 116 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搜索很好,但不适合大数据。