Java中的多个关键字搜索

时间:2015-02-03 06:05:08

标签: java database search

我在MySQL数据库中有一个基于Java的应用程序和一组关键字(总共大约3M关键字,每个关键字可能包含多个单词,例如它可以是:“memory”,“old house”,“欧盟法律“等)。

用户通过上传包含任意文本的文档(大多数时间都是几页)来与应用程序进行交互。 我想要做的是搜索文档中是否以及在哪里出现300万个关键字。

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

我非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

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

  

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

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

答案 1 :(得分:1)

您可以尝试使用bloom过滤器http://en.wikipedia.org/wiki/Bloom_filter。然后针对布隆过滤器检查每个单词以找出正面。请记住,可能存在误报。因此,如果布隆过滤器中有正面信息,那么您可以尝试一个SQL查询,例如从关键字表中选择关键字,其中关键字为(布隆过滤器中的正数)'具体确定上传文件中存在哪些关键词。

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

答案 2 :(得分:1)

您可以使用The Lemur Project上提供的sourceforge

  

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

正如Taher所推荐的那样,Apache Lucene是一个不错的工具,而且我已经使用了它们并且它们非常棒。