У меня очень большая коллекция (более 800k), и мне нужно реализовать запрос для автозаполнения (основанный только на словах) функциональности на основе тегов. мои документы выглядеть следующим образом:mongodb fast tags query
{
"_id": "theid",
"somefield": "some value",
"tags": [
{
"name": "abc tag1",
"vote": 5
},
{
"name": "hij tag2",
"vote": 22
},
{
"name": "abc tag3",
"vote": 5
},
{
"name": "hij tag4",
"vote": 77
}
]
}
если, например, мой запрос будет для всех тегов, которые начинаются с «AB» и имеют «SomeField», то есть «некоторое значение» результат будет «а tag1», «abc tag3» (только имена). Меня волнует скорость запросов намного больше, чем скорость вставок и обновлений.
Я предполагаю, что структура агрегации будет правильным путем, но что будет лучшим конвейером и индексами для очень быстрого запроса?
документы не являются документами «тега», они являются документами, представляющими объект-клиент, они содержат гораздо больше полей данных, которые я забыл для простоты, каждый клиент имеет несколько тегов и другое поле (я изменил его имя, чтобы оно не было путают с массивом меток). Мне нужно получить набор без дубликатов всех тегов, которые есть у группы клиентов.
Я попытался сделать что-то подобное в прошлом году, но с гораздо меньшей базой данных. В итоге мне пришлось использовать Solr по мере роста объема данных. – Martin
можете ли вы отправить запрос и индексы, которые вы пробовали? Вы использовали структуру агрегации? – jacob
Простите, код давно ушел, но он был основан на регулярных выражениях в поле тега. Он предписывает структуру агрегации, но я не уверен, что это был бы наилучший подход. По моему опыту, структура агрегации любит читать целые документы в памяти, даже если совпадение $ могло быть сделано с использованием только индекса – Martin