Ответ 1
Функция текстового поиска в MongoDB (как в версии 2.6) не имеет встроенных функций для нечеткого/частичного соответствия строк. Как вы уже отметили, в данном случае основное внимание уделяется языковой поддержке и поддержке с базовыми булевыми операторами и сопоставлением слов/фраз.
Существует несколько возможных подходов к определению нечеткого соответствия в зависимости от ваших требований и того, как вы хотите квалифицировать "эффективные" (скорость, хранение, время разработки, требуемая инфраструктура и т.д.):
-
Внедрить поддержку нечеткого/частичного соответствия в вашей прикладной логике с использованием некоторых доступных алгоритмов звука и сходства. Преимущества этого подхода включают в себя необходимость не добавлять дополнительную инфраструктуру и быть в состоянии точно настроить соответствие вашим требованиям.
Более подробные примеры см. в разделе Эффективные методы для нечеткого и частичного сопоставления в MongoDB.
-
Интеграция с внешним инструментом поиска, который обеспечивает более продвинутые функции поиска. Это добавляет некоторую сложность для вашего развертывания и, скорее всего, избыточно для типов, но вы можете найти другие функции поиска, которые вы хотели бы включить в другое место в своем приложении (например, "как это", "близость слова", грантовый поиск,..).
Например, см. Как выполнить нечеткое сопоставление с Mongo Connector и Elastic Search. Примечание: ElasticSearch нечеткий запрос основан на расстоянии Левенштейна.
-
Используйте библиотеку автозаполнения, такую как Twitter open source
typeahead.js
, которая включает в себя механизм предложений и API запросов/кеширования. Typeahead фактически дополняет любой из других подходов к бэкэнд, а его (необязательный) движок предложения Bloodhound поддерживает предварительную выборку, а также кэширование данных в локальных хранения.