0

Есть некое множество слов, пусть это будет 100 000 слов.

Есть некое количество текстов, пусть будет 150 000 текстов, пусть среднее количество слов в каждом тексте будет 50.

Есть программа которая ищет в цикле каждое слово из первого множества, сейчас это все в массивах и просто сравнивается между собой, на что уходит очень много времени.

Есть ли такие системы которые могут выполнить такие проверки с большим количеством параллельных потоков или еще как то?

Какие идеи пока что посетили меня.
Положить первое множество в таблицу MySQL, и навесить ключ на поле с этим множеством.

Далее положить во временную таблицу InMemory все слова из текстов и потом соеденить их через INNER JOIN. Но у нас в каждом тексте может быть несколько совпадений с первым множеством и как при этом отделить одно от другого мне не совсем понятно.

Может можно как то использовать Elasticsearch, Redis и тому подобные системы?

0xdb
  • 51,614
  • 4
    См. алгоритм Ахо-Корасик, за один проход ищет вхождение сразу многих подстрок. Вы не его ищете? – Harry May 27 '22 at 13:10
  • @Harry как этот алгоритм относится к большому количеству итераций сравнения строк? – Дмитрий Гвоздь May 27 '22 at 13:13
  • В данном случае проблема не в поиске строк а в большом количестве этих поисков – Дмитрий Гвоздь May 27 '22 at 13:14
  • Множество слов постоянно? Если да, то отсортировать его, а далее использовать бинарный поиск - он чрезвычайно быстр. / Или, может, тексты постоянны и отсортированы? – Alexander Petrov May 27 '22 at 13:34
  • 1
    https://ru.stackoverflow.com/a/532675/184217 – Alexander Petrov May 27 '22 at 13:37
  • 3
    При поиске поочередно N слов в текстах длиной M - O(NM), при поиске Ахо-Корасик O(M). Еще раз - одним проходом ищется одновременно вхождение любого из множества слов. – Harry May 27 '22 at 13:44

0 Answers0