【发布时间】:2011-09-24 17:20:24
【问题描述】:
我有一本超过 300000 字的书。
每个单词都有元数据(语法信息;解析细节和引理[根形式])
什么是构建数据的最佳方式,以便我可以搜索单词或单词组并快速获得结果。我也希望能够搜索对元数据的要求。
我需要能够搜索确切的短语或仅搜索彼此接近的单词。
我的问题是关于数据库设计和查询方法的。
【问题讨论】:
标签: language-agnostic full-text-search
我有一本超过 300000 字的书。
每个单词都有元数据(语法信息;解析细节和引理[根形式])
什么是构建数据的最佳方式,以便我可以搜索单词或单词组并快速获得结果。我也希望能够搜索对元数据的要求。
我需要能够搜索确切的短语或仅搜索彼此接近的单词。
我的问题是关于数据库设计和查询方法的。
【问题讨论】:
标签: language-agnostic full-text-search
一个起点是使用 Lucene+Solr 设置并索引您拥有的数据。
【讨论】:
在这种情况下,我强烈推荐 Rabin–Karp 算法。尽管 Rabin-Karp 不如其他一些搜索算法那么快,但它擅长匹配多个模式,并且由于您说您将搜索多个短语和引理,因此它是最合适的。平均情况和最佳情况都在O(n + m) 中,其中 n 是 300,000 个单词的总长度,m 是您正在搜索的模式的总长度。在最坏的情况下,您会遇到O(mn) 时间。
就存储数据而言,您将使用大型散列滚动表或更理想的情况是 bloom filter。
这里有一些相关的问题、文章和 C 和 ruby 中的实现。希望这会有所帮助。
【讨论】: