2013-03-26 3 views
0

Как можно получить мелкозернистый поиск с помощью mongodb без использования внешних двигателей? Возьмите этот объект как пример { жанр: 'комедия', страниц: 380, год: 2013, бестселлера: правда, автор: 'John Doe' }поиск по нескольким параметрам с помощью mongodb

Это ищется следующим:

db.books.find({ 
    pages:  { '&gt': 100 }, 
    year:  { '&gt': 2000 }, 
    bestseller: true, 
    author:  "John Doe" 
}); 

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

Первое, что я хотел бы сделать, это создать индексы. Но как это работает? Я прочитал, что пересечение индекса, как определено здесь https://jira.mongodb.org/browse/SERVER-3071, не выполнимо. Это означает, что если я установлю индекс на «год» и «страницы», я не буду оптимизировать операции И в результатах поиска.

Итак, как оптимизировать поиск для получения множества параметров?

Заранее спасибо.

ответ

0

Похоже, вы спрашиваете о compound indexes in mongodb. Компонентные индексы позволяют создать единый индекс для нескольких полей в документе. Создавая сложные индексы, вы можете делать эти большие/сложные запросы, все еще используя индекс.

В более общем примечании, если вы создаете базовый индекс в поле, которое является очень избирательным, ваш поиск может оказаться очень быстрым. Используя ваш пример, если у вас есть указатель на автора, механизм запроса будет использовать этот индекс, чтобы найти все записи, в которых автор == «John Doe». По-видимому, не так много книг с этим конкретным автором относительно количества книг во всей коллекции. Таким образом, даже если остальная часть вашего запроса является довольно сложной, она оценивается только по нескольким документам с соответствующим автором. Таким образом, структурируя свои индексы правильно, вы можете получить значительное увеличение производительности без необходимости иметь какие-либо сложные индексы.

+0

спасибо. Однако приведенный мной код был всего лишь примером. Знаете ли вы, есть ли какие-либо инструменты, которые могут помочь в поиске частых запросов, которые могут помочь найти лучшие совпадения для создания индексов? –

+0

Привет, Джон, я не знаю никаких инструментов лично, кажется, что большинство людей выясняют это вручную, используя профилировщик, чтобы найти, какие запросы выполняются медленно, а затем оптимизировать их индексы для этих конкретных запросов. – ACE

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