Это невероятно сложная проблема, и ее нельзя решить таким образом, чтобы всегда давал адекватные результаты.Я бы предложил придерживаться некоторых очень простых принципов, чтобы результаты были как минимум предсказуемы.Я думаю, вам нужно 2 вещи: некоторый базовый механизм морфологии плюс словарь синонимов.
Когда бы ни поступил поисковый запрос, для каждого слова вы
- Ищите буквальное совпадение
- «Нормализовать / канонизировать» слово, используя механизм морфологии, то есть сделать его единичным, первой формы и т. Д. И искать совпадения
- Искать синонимы слова
Тогдаповторите для всех комбинаций входных слов, то есть "большие кошки", "большие кошки", "огромные кошки" огромные кошки "и т. д.
Фактически, вам также нужно хранить данные индекса в канонической форме.(Singluar, первая форма и т. д.) вместе с буквальной формой.
Что касается понятий, например, кошки также являются животными - это то, где это становится сложным. Это никогда не работало, потому что в противном случае Google вернул бы концептуальноеуже совпадает, но он этого не делает.