2013-10-26 4 views
2

Начинающий с поиском эластиков. Я чувствую, что это должно быть довольно просто, но я застрял здесь. У меня есть отображение сообщения, который выглядит так:Эластичный порядок поиска по количеству вложенных объектов

[ post1: { 
    title: 'asdfasd', 
    comments: [commment1, comment2, comment3] 
}, 
post2: { 
    title: 'asdf', 
    comments: [comment1, comment2] 
} 
. 
. 
.] 

И я пытаюсь искать их по названию, а затем заказать их по количеству комментариев. Я могу искать по названию просто отлично, но я немного смущен относительно того, как упорядочить результаты по количеству комментариев. Каким будет лучший способ сделать это?

ответ

13

У вас есть два варианта -

  1. Используйте script, чтобы получить длину массива. Таким образом, вы могли бы сделать что-то вроде:

    { 
        "query" : { 
        .... 
        }, 
        "sort" : { 
        "_script" : { 
         "script" : "doc['comments'].values.length", 
         "type" : "number", 
         "order" : "desc" 
        } 
        } 
    } 
    
  2. Держите дополнительное поле для количества комментариев, каждый раз, когда вы добавляете комментарий также увеличивают значение счетчика комментариев, и сортировать по ним.

Вариант № 2 предпочтительнее, если у вас много данных. Использование сценария имеет накладные расходы, и это может увеличить время поиска, если вам нужно вычислить сценарий в большой коллекции документов. Сортировка по полю, с другой стороны, намного лучше с точки зрения производительности. Я бы пошел с №2.

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