【问题标题】:Full Text Search Optimization Techniques全文搜索优化技术
【发布时间】:2011-09-24 17:20:24
【问题描述】:

我有一本超过 300000 字的书。
每个单词都有元数据(语法信息;解析细节和引理[根形式])

什么是构建数据的最佳方式,以便我可以搜索单词或单词组并快速获得结果。我也希望能够搜索对元数据的要求。

我需要能够搜索确切的短语或仅搜索彼此接近的单词。

我的问题是关于数据库设计和查询方法的。

【问题讨论】:

    标签: language-agnostic full-text-search


    【解决方案1】:

    一个起点是使用 Lucene+Solr 设置并索引您拥有的数据。

    这是一个示例教程:http://lucene.apache.org/solr/tutorial.html

    【讨论】:

    • 索引自​​然是长期悬而未决的果实。您是否会将每个单词放在自己的行中(及其相应的元数据)?或者你会把这些词放在一个段落中吗?你如何将它们链接到元数据等等是我正在考虑的问题......
    【解决方案2】:

    在这种情况下,我强烈推荐 Rabin–Karp 算法。尽管 Rabin-Karp 不如其他一些搜索算法那么快,但它擅长匹配多个模式,并且由于您说您将搜索多个短语和引理,因此它是最合适的。平均情况和最佳情况都在O(n + m) 中,其中 n 是 300,000 个单词的总长度,m 是您正在搜索的模式的总长度。在最坏的情况下,您会遇到O(mn) 时间。

    就存储数据而言,您将使用大型散列滚动表或更理想的情况是 bloom filter

    这里有一些相关的问题、文章和 C 和 ruby​​ 中的实现。希望这会有所帮助。

    【讨论】:

    • 谢谢,我会看看这些。
    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2019-05-16
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多