Java:在字母排序的文本文件中查找单词的最佳方法

ljt*_*uis 3 java binary-search text-files alphabetical

我有这个按字母顺序排列的巨大索引,我需要获取特定术语的行.逐行读取文件并检查我是否得到了正确的术语对我来说似乎没有效率,因此索引的大小(我们将英语维基百科语料库编入索引).

因此,我正在寻找一种在线上进行二分搜索的方法.我使用LineNumberReader来有效地获取行数,但似乎没有有效的解决方案来从文件中获取第n行.

我想知道是否读取行直到我在第n行,检查它是否是正确的术语并根据二进制搜索算法采取行动(可能再次读取行,因为我需要一行我已经跳过)更有效那么只是逐行检查条款?

任何其他建议也非常欢迎!

请注意,我需要获取一组行,具体取决于要搜索的术语集.

mik*_*era 5

听起来你应该使用一个数据库 - 它们受益于多年来与大型数据集上的索引查询相关的精心设计,如果你自己推出这些数据集,你不太可能接近它们.

如果你真的想自己做,你需要创建两个单独的索引:

  • 包含该术语的单词 - >行号索引,以便您可以快速计算包含给定搜索词的行号集
  • 行号索引 - >文件中的位置,以便您可以通过随机访问快速检索正确的行

此外,如果您的数据集非常大,那么这两个索引本身都可能比内存大.因此,您必须实现基于磁盘的索引 - 类似于B树.在这一点上,你将重新发明大部分RDBMS轮,并且可能因为没有使用正确的数据库而踢自己.

考虑尝试PostgreSQL - 它是开源的,非常成熟和维护良好,并具有相当不错的文本搜索功能.