Подобные вещи обычно реализуются с использованием Lucene , особенно если вы собираетесь многократно перезапускать свое приложение или у вас нет кучи памяти. Lucene поддерживает много других вкусностей .
Однако, если вы хотите «свернуть свой» код и у вас достаточно памяти (вероятно, 1 ГБ), ваше приложение может:
- разобрать файл в последовательность слов,
- отфильтровать стоп-слова,
- создает "обратный индекс" как
HashMap<String, List<Integer>>
, где значения String
являются уникальными словами, а объекты List<Integer>
дают смещения вхождений слов в файле.
Это может занять несколько секунд (или минут), чтобы обработать такой большой файл. Но как только вы создали обратный индекс в памяти, вы можете очень быстро выполнить поиск по вхождению. (Может быть, микросекунды за поиск.)