Массив запросов MongoDB, содержащий текст поиска

У меня есть следующий запрос (MongoMapper/Rails): Card.where(:card_tags => {:$all => search_tags}

Где card_tags — это массив строковых тегов, а search_tags — массив строк поиска. На данный момент, если кто-то ищет «снег», результаты с тегом «сноубординг» не будут возвращены.

Как я могу изменить этот запрос, чтобы найти, содержат ли какие-либо строки в card_tags какие-либо строки в search_tags? На ум приходят регулярные выражения, но я не уверен в синтаксисе, учитывая, что это массивы...

Спасибо


person psdr16    schedule 22.03.2012    source источник


Ответы (1)


Вы можете использовать регулярные выражения, но вы будете выполнять полное сканирование коллекции — это плохо скажется на производительности.

Вы можете использовать регулярное выражение с индексом, только если вы «начинаете с» типа поиска, но я сомневаюсь, что вы хотите ограничить себя этим.

Для полнотекстового поиска лучше использовать какой-нибудь внешний поисковый сервис, например Lucene, ElasticSearch или Solr.

См. также этот пост: подобный запрос в mongoDB

person Bryan Migliorisi    schedule 22.03.2012
comment
Спасибо! Я знаю синтаксис регулярного выражения из присланной вами ссылки, но есть идеи, как я могу включить это в свой запрос, который сравнивает два массива строк? В основном мне нужен какой-то способ обернуть регулярное выражение вокруг каждого из элементов search_tags. - person psdr16; 23.03.2012