Как сделать частичный поиск в mongodb?

Как сделать частичный поиск в mongodb
сейчас делаю если искать так:
db.content.find({$text: {$search: "Охранник торгового"}})

то выводятся все записи где встречаются охранник и торгового,
а вот если сделать так:
db.content.find({$text: {$search: "Охран"}}) то уже не выводит ничего, то есть он сейчас ищет по словам, если есть такое слово охран то выводит, а "охранник"-а не выводит,

Или если искать "торг" то ищет только слова торг а не все где встречается торг (торгового и тд)
  • Вопрос задан
  • 2743 просмотра
Пригласить эксперта
Ответы на вопрос 3
al_gon
@al_gon
Mongo не для таких упражнений.
Если всё же очень нужен Mongo-велосипед, то нужет свой токенизатор и такое можно сделать на N-Gram'ах.

А вообще надо в сторону Lucene/Solr/Elasticsearch смотреть.
Ответ написан
Комментировать
zoonman
@zoonman
⋆⋆⋆⋆⋆
У MongoDB сейчас поиском не все хорошо, особенно на русском языке. Я пытался пофиксить их список стоп-слов, но есть внутренняя проблема с версионированием индексов. Пока ее не решат, подвижек в области поиска по словам не стоит ожидать.
Поиск по части слова можно реализовать с использованием регулярных выражений, но это будет не очень эффективно и медленно. al_gon все правильно говорит, для поиска по тексту нужны решения, которые специально заточены под поиск.
Ответ написан
Комментировать
@lega
Можно указать язык в индексе, тогда будет искать слова со склонениями ("книга/книги"),
Полнотекстового в монге вроде как нет, но можете вручную разбивать текст, например "Охранник" -> "охр охра охран охранн охранни охранник", тогда будет искать по любой части (с начала слова), аналогично делается поиск по любой части слова.
3-граммы (n-граммы) для поиска с опечатками.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы