2016-12-12 2 views
2

Полнотекстовый поиск в MongoDB кажется приятной особенностью, особенно когда речь заходит о необходимости высокопроизводительного поиска и индексов. Тем не менее, мне интересно, почему полный текстовый поиск не разрешен для более чем одной коллекции.MongoDB оператор полнотекстового поиска и поиска

Например: у меня есть поставщик и коллекция продуктов (у каждого поставщика есть n продуктов). Мне бы очень хотелось сделать поиск по всем продуктам, но имя поставщика также должно быть согласовано. Прямо сейчас я делаю это с $ lookup, а затем с регулярным выражением. Это работает, но очень медленно (500 - 800 мс).

Если бы я использовал полнотекстовый поиск с индексом, это значительно увеличило бы производительность. Но текстовый оператор $ должен быть первым этапом в конвейере агрегации, не позволяя мне сначала использовать поиск $.

(см ограничений сечение: https://docs.mongodb.com/manual/reference/operator/query/text/#op._S_text)

Любые идеи, как я мог бы увеличить скорость поиска текста по нескольким наборам?

ответ

0

для кого-то, кто все еще ищет решение

db.getCollection('projects').aggregate([{ 
    "$match": { 
     "$text": {"$search": query } 
    }}, { 
    "$lookup": { 
     "from":   "users", 
     "localField": "uuid", 
     "foreignField": "uuid", 
     "as":   "user" 
    }}, { 
     "$sort": { 
      "score": { "$meta": "textScore" } 
     } 
    }]); 

, где запрос поиска текстовой строки.

Этот запрос для projects коллекции с ключом uuid, который относится к users коллекции с uuid ключом, все отсортировано по релевантности.

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