Хочу находить слово «баранами» по слову «бараны», например.
Я себе так представляю:
-
В некой струтуре данных (hashtable, b+-tree и т.п.) лежит и занимает место много ключеый [«баран»,«баранов»,«баранам»,«баранами»,«баранах»], каждый из которых показывает на всё это множество.
-
Что происходит: юзер вводит «баранами», мы достаём всё множество этих слов N.
-
С каждым из N слов отдельно идём в индекс документов и достаём для каждого кучку документов.
-
Как-то мёржим всю кучу документов в одну кучу (тут уже 100000 вариаций мёржинга: расстояние слово от искомого, релевантность, свежесть и т.п. и т.д.)
Или там на первом этапе никакая куча отдельных ключей не лежит, а какой-то хитрый алгоритм динамически меняет русские слова в рантайме, не храня нифига никакие склонения?
Да-да, я знаю что есть автор Sphinx со своими парадами остроумия.
В целом, вопрос носит максимально низкоуровневый характер: как бы «достаточно хороший» русский поиск сделали вы, если бы у вас были любые словари и только голая сишечка. Кроме «хороший поиск» есть критерий: «за пол-миллиекунды».