Из своего опыта: Пробовал на PostreSQL, правда для небольших текстов (2-8 слов). У меня был вопрос скорее не в поиске в большом тексте, а в вариативности однокоренных слов, учет ошибки раскладки, учет пропущенных букв и синонимы
Но как работает для больших текстов не пробовал. Пишут — работает (поиск по «похожести» делает достаточно быстро).
Основная идея — в базе создается таблица — справочник уникальных слов по всем документам. Каждому слову в соответствие ставить число (код) — для однокоренных слов — число одинаковое. Тоесть можно несколько груп с одинаковым смыслом обозначить одним числом. Движок FTS использует эту таблицу для формирования вектора. — В таблицу с документами добавляется поле типа вектор пар.(тип предоставляет движок FTS). В нем после анализа документа записывается вектор с парами «код — число». Код — это код из таблицы-справочника группы слов. Число — что-то типа вероятности или частоты упоминания слова в документе. По такому полю есть возможность строить индекс и делать что-то типа like запроса. Или точнее движок FullTextSearch предоставляет функцию высчитывающую разность между поисковой строкой и вот этим хитрым полем. Результат функции — число, по которому можно фильтрануться и отсортироваться.
Разбирайтесь с FullTextSearch для своей СУБД. Зачем эти крутые велосипеды, время только убьете.
На хабре есть инфа по MySQL.
habrahabr.ru/post/40218
Вот доки по постгресу
www.postgresql.org/....3/static/textsearch.html
В MSSQL тоже должно быть.
А так как вся эта кухня пришла кажется с Ораклоидов — то там есть в любом случае.
Из своего опыта:(2-8 слов). У меня был вопрос скорее не в поиске в большом тексте, а в вариативности однокоренных слов, учет ошибки раскладки, учет пропущенных букв и синонимы
Пробовал на PostreSQL, правда для небольших текстов
Но как работает для больших текстов не пробовал. Пишут — работает (поиск по «похожести» делает достаточно быстро).
Основная идея
— в базе создается таблица — справочник уникальных слов по всем документам. Каждому слову в соответствие ставить число (код) — для однокоренных слов — число одинаковое. Тоесть можно несколько груп с одинаковым смыслом обозначить одним числом. Движок FTS использует эту таблицу для формирования вектора.
— В таблицу с документами добавляется поле типа вектор пар.(тип предоставляет движок FTS). В нем после анализа документа записывается вектор с парами «код — число». Код — это код из таблицы-справочника группы слов. Число — что-то типа вероятности или частоты упоминания слова в документе. По такому полю есть возможность строить индекс и делать что-то типа like запроса. Или точнее движок FullTextSearch предоставляет функцию высчитывающую разность между поисковой строкой и вот этим хитрым полем. Результат функции — число, по которому можно фильтрануться и отсортироваться.
Вот тут лучше читануть примеры
www.postgresql.org/...#TEXTSEARCH-TABLES-SEARCH
и искать под свою СУБД
Да, и поиск слова в справочнике может выполняется не по точному совпадению