Нужно быстро находить документы, где встречается слово. Сделаем небольшой inverted index, который хранит для каждого слова набор id документов.
Начнём с хранилища индекса:
Map<String, Set<Integer>> index = new HashMap<>();
Документ можно представить обычной строкой:
int id = 7;
String text = "Java streams and maps";
Разобьём текст на слова в нижнем регистре:
String[] words = text
.toLowerCase()
.split("\\W+");
Теперь добавим каждое слово в индекс:
for (String word : words) {
index.computeIfAbsent(word, k -> new HashSet<>())
.add(id);
}Поиск становится простым обращением к map:
Set<Integer> result = index.getOrDefault(
"java",
Set.of()
);
Такой индекс не заменяет полноценный search engine, но хорошо показывает идею. Мы заранее строим структуру, чтобы потом быстро получать список документов по слову.
👉 Java Ready | #практика