【问题标题】:How to search 1 million strings in document in java?如何在java中搜索文档中的100万个字符串?
【发布时间】:2013-07-06 12:37:01
【问题描述】:

我有一个包含 100 万行的文档,需要针对大约 8000 行的文件进行搜索。我最初尝试过 lucene,但是搜索这么多搜索请求所花费的时间需要时间。是否可以执行这样的搜索操作???我需要在包含 8000 行的纯文本文档中找到与搜索字符串相似的字符串。我尝试使用 lucene 的可能方法:

  1. 索引 8000 行文档并传递 100 万个搜索查询。
  2. 索引包含搜索查询的文档并将 8000 行文档作为搜索查询传递。我不确定这是不是一个正确的想法。
  3. 一个可能的:我从未尝试过。索引两个文档并比较它们的相似性。这甚至可以做到吗?

【问题讨论】:

  • 我不熟悉“十万”这个词。我看到它被用于 100,000 的参考。那是对的吗?如 100 万 = 1,000,000?
  • 是的 10 Lkh = 1,000,000 .
  • 8000行文件包含什么?这些只是一些关键字还是一些长句/短语?请发布两个文档中的一些示例内容。
  • 主要是句子,每行一个句子。
  • 什么是“匹配”?整个句子或这些句子中的任何标记?

标签: java search lucene indexing


【解决方案1】:

尚不清楚您的搜索条件究竟是什么。

  1. 如果您想要模糊的结果并且您可以接受所需的时间,Lucene 可能是最佳选择。 (其他好的解决方案可能不会快很多。)听起来您想将每一行索引为单独的文档。你以前这样做过吗?

    在 8 核服务器上对包含所有 Wikipedia 的 Lucene 数据库运行 7,500 次简短查询需要 10-20 分钟。所以它不是瞬时的。但这可能已经足够好了。

  2. 如果文件中的行完全对应,还有一个更简单的解决方案:

    grep -f million_lines.txt 8000_lines.txt
    

    我不知道这与使用 8,000 行文件作为模式集和使用百万行文件作为输入文件相比在性能方面如何。有人愿意评论吗?

【讨论】:

  • 感谢您的回复。由于要索引的内容很小,我从中构建了倒排索引,并使用带有 ngrams 的简单查询字符串,这减少了它使用的时间和资源。
猜你喜欢
  • 2021-05-29
  • 2019-12-28
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多