2012-03-22 3 views
0

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

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

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

Спасибо

ответ

1

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

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

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

См. Этот пост тоже: like query in mongoDB

+0

Спасибо! Я знаю синтаксис регулярных выражений из ссылки, которую вы отправили, но любая идея, как я могу вписать это в мой запрос, который сравнивает два массива строк? Мне в основном нужен способ переноса регулярного выражения вокруг каждого элемента search_tags. – psdr16

Смежные вопросы