Индекс для полнотекстового поиска
От: BlackEric http://black-eric.lj.ru
Дата: 19.03.24 19:41
Оценка:
Положим есть очень большое файловое хранилище. Разнородное. ~50 TB. Считаем что оно только для чтения.
В нем файлы различных типов. И мы умеем извлекать из них текст.

Собственно вопрос: как организовать индекс по какому будет идти поиск, что бы он имел минимальный размер?
Хотя бы укладывался в 5% объема текста файлов. Понятно что рядом с индексом нужно хранить пути к файлам где этот текст содержится.

Что читать по теме?

Спасибо.
https://github.com/BlackEric001
Re: Индекс для полнотекстового поиска
От: Буравчик Россия  
Дата: 20.03.24 05:52
Оценка: 3 (1)
Здравствуйте, BlackEric, Вы писали:

BE>Собственно вопрос: как организовать индекс по какому будет идти поиск, что бы он имел минимальный размер?


Можно посмотреть на поиск по триграммам (n-граммам), и соответствующие индексы
Best regards, Буравчик
Re: Индекс для полнотекстового поиска
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.24 06:39
Оценка: 86 (3) +2
Здравствуйте, BlackEric, Вы писали:


BE>Собственно вопрос: как организовать индекс по какому будет идти поиск, что бы он имел минимальный размер?

Это называется inverted index. Концептуально представляет из себя таблицу: токен->список документов, позиций в них где встречается токен, прочие данные.

Как эту таблицу хранить и как в ней искать — везде свои реализации, зависящие от того какие запросы, и как ранжировать рзультаты.
Используются обычно хэштаблицы, bloom фильтры (и другие нечеткие фильтры), B-деревья, skiplists или просто готовые key-value движки.

BE>Хотя бы укладывался в 5% объема текста файлов. Понятно что рядом с индексом нужно хранить пути к файлам где этот текст содержится.

Мне кажется что 5% это нереально. хорошо если 30% выйдет, а в некоторых случаях полнотекстовый индекс превосходит по объему сами данные

BE>Что читать по теме?

Почитать про Inverted Indexes (FullText Indexes) в СУБД , а также посмотреть как это реализовано в опенсорсных движках — lucene, elastic search итд

BE>Спасибо.
Re[2]: Индекс для полнотекстового поиска
От: BlackEric http://black-eric.lj.ru
Дата: 20.03.24 09:58
Оценка:
Здравствуйте, gandjustas, Вы писали:

BE>>Хотя бы укладывался в 5% объема текста файлов. Понятно что рядом с индексом нужно хранить пути к файлам где этот текст содержится.

G>Мне кажется что 5% это нереально. хорошо если 30% выйдет, а в некоторых случаях полнотекстовый индекс превосходит по объему сами данные

А как тогда поисковики свой индекс хранят? Не всё же они себе сохраняют.

BE>>Что читать по теме?

G>Почитать про Inverted Indexes (FullText Indexes) в СУБД , а также посмотреть как это реализовано в опенсорсных движках — lucene, elastic search итд

Спасибо, почитаю. Я и хочу это в Elastic складывать.
https://github.com/BlackEric001
Re[3]: Индекс для полнотекстового поиска
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.24 11:30
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>Здравствуйте, gandjustas, Вы писали:


BE>>>Хотя бы укладывался в 5% объема текста файлов. Понятно что рядом с индексом нужно хранить пути к файлам где этот текст содержится.

G>>Мне кажется что 5% это нереально. хорошо если 30% выйдет, а в некоторых случаях полнотекстовый индекс превосходит по объему сами данные

BE>А как тогда поисковики свой индекс хранят? Не всё же они себе сохраняют.

Ты удивишься...
Re[2]: Индекс для полнотекстового поиска
От: Qulac Россия  
Дата: 20.03.24 11:32
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, BlackEric, Вы писали:



BE>>Собственно вопрос: как организовать индекс по какому будет идти поиск, что бы он имел минимальный размер?

G>Это называется inverted index. Концептуально представляет из себя таблицу: токен->список документов, позиций в них где встречается токен, прочие данные.

G>Как эту таблицу хранить и как в ней искать — везде свои реализации, зависящие от того какие запросы, и как ранжировать рзультаты.

G>Используются обычно хэштаблицы, bloom фильтры (и другие нечеткие фильтры), B-деревья, skiplists или просто готовые key-value движки.

BE>>Хотя бы укладывался в 5% объема текста файлов. Понятно что рядом с индексом нужно хранить пути к файлам где этот текст содержится.

G>Мне кажется что 5% это нереально. хорошо если 30% выйдет, а в некоторых случаях полнотекстовый индекс превосходит по объему сами данные

BE>>Что читать по теме?

G>Почитать про Inverted Indexes (FullText Indexes) в СУБД , а также посмотреть как это реализовано в опенсорсных движках — lucene, elastic search итд

BE>>Спасибо.


Я на заре своей карьеры как-то эту штуку в ручную делал.
Программа – это мысли спрессованные в код
Re[3]: Индекс для полнотекстового поиска
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.24 11:35
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>А как тогда поисковики свой индекс хранят? Не всё же они себе сохраняют.

Ты удивишься...
Re: Индекс для полнотекстового поиска
От: Michael7 Россия  
Дата: 26.03.24 13:16
Оценка: +1
Здравствуйте, BlackEric, Вы писали:


BE>Что читать по теме?


TF@IDF https://habr.com/ru/companies/otus/articles/755772/

А вообще почитай про word2vec и FastText — это построние эмбеддингов для слов, но их потом можно складывать для предложений и целых страниц текста.
Re[2]: Индекс для полнотекстового поиска
От: Sharov Россия  
Дата: 27.03.24 17:46
Оценка:
Здравствуйте, gandjustas, Вы писали:

BE>>Хотя бы укладывался в 5% объема текста файлов. Понятно что рядом с индексом нужно хранить пути к файлам где этот текст содержится.

G>Мне кажется что 5% это нереально. хорошо если 30% выйдет, а в некоторых случаях полнотекстовый индекс превосходит по объему сами данные

Это почему нереально, если это от данных зависит? Мож там 10 слов повторяются на 5Т?
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.