【问题标题】:Multiple keyword search in JavaJava中的多个关键字搜索
【发布时间】:2015-04-02 06:19:52
【问题描述】:

我有一个基于 Java 的应用程序和 MySQL 数据库中的一组关键字(总共大约 300 万个关键字,每个关键字可能包含多个单词,例如可以是:“记忆”、“老房子”、“欧盟法律”等)。

用户通过上传带有任意文本的文档(大多数情况下是几页)与应用程序进行交互。 我要做的是搜索文档中是否以及在何处出现了 300 万个关键字中的任何一个。

我尝试过使用循环并在文档中搜索每个关键字,但这根本没有效率。 我想知道是否有一个库可以以更省时的方式执行搜索。

如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 如何在关键字旁边的列中存储每个关键字的哈希值,并在阅读文档期间检查每个单词,例如select keyword from keywords where keyword_hash = calculateHash(wordToCheck)
  • 您需要考虑的是最短路径。进行 300 万次搜索,或从上传的文档中构建 N 个短语。一种解决方案可能是构建所有 3M 关键字的搜索来搜索文档。使用 Lucenes Keyword Highlighter 并将所有突出显示的单词与 3M 关键字匹配;)
  • 有没有办法在荧光笔的同一提取文本部分中获得多关键字结果?或者更好的是,是否有一种结构可以返回在文件中找到的匹配关键字列表?

标签: java database search


【解决方案1】:

项目Apache Lucene 可能会有所帮助。

Apache LuceneTM 是一个高性能、全功能的文本搜索引擎库,完全用 Java 编写。这项技术几乎适用于任何需要全文搜索的应用程序,尤其是跨平台。

你可以找到一些有用的教程here

【讨论】:

    【解决方案2】:

    您可以使用The Lemur Project 也可以在sourceforge 获得:

    Lemur 项目开发搜索引擎、浏览器工具栏、文本分析工具和支持信息检索和文本挖掘软件研发的数据资源,包括 Indri 搜索引擎和 ClueWeb09 数据集。

    正如 Taher 推荐的那样,Apache Lucene 是一个不错的工具,我已经使用了它们,它们都很棒。

    【讨论】:

      【解决方案3】:

      您可以尝试使用布隆过滤器http://en.wikipedia.org/wiki/Bloom_filter。然后根据布隆过滤器检查每个单词以找出积极因素。请记住,可能存在误报。因此,如果布隆过滤器有阳性结果,那么您可以尝试类似“从关键字表中选择关键字其中关键字(布隆过滤器的阳性结果)”之类的 sql 查询来具体确定上传的文档中存在哪些关键字。

      在 Guava 库中可用的布隆过滤器的 Java 实现。 http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/hash/BloomFilter.html

      【讨论】:

        猜你喜欢
        • 2012-07-24
        • 1970-01-01
        • 1970-01-01
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-16
        • 1970-01-01
        相关资源
        最近更新 更多