2016-10-31 5 views
1

У меня есть набор документации (давайте назовем их books), которые имеют подмножество информации (скажем, editions), структуры данных, несколько похожее на это:Как вернуть частичный документ из запроса/фильтра Elasticsearch?

"book": { 
 
    "author": "A. N. Author", 
 
    "title": "Fantastic Queries and How to Index Them" 
 
    "editions": [ 
 
     { 
 
      "publisher":"penguin", 
 
      "isbn": 124161256653, 
 
      "coverArtist":"Pain T Brush", 
 
      "amazonPrice":65.50 
 
     }, 
 
     { 
 
      "publisher":"orbit", 
 
      "isbn": 124163526653, 
 
      "coverArtist":"Pain T Brush", 
 
      "amazonPrice":25.99 
 
     }, 
 
     { 
 
      "publisher":"tor", 
 
      "isbn": 124169876353, 
 
      "coverArtist":"Pen See Il", 
 
      "amazonPrice":700.00 
 
     } 
 
    ] 
 
}

права теперь с запросами, которые у меня есть (поиск по editions.publisher или editions.isbn), я возвращаю весь документ, включая выпуски, которые не соответствуют результатам запроса. Таким образом, чтобы быть ясным, если я ищу coverArtist для Pain T Brush, данные я хочу Возвращается:

"book": { 
 
    "author": "A. N. Author", 
 
    "title": "Fantastic Queries and How to Index Them" 
 
    "editions": [ 
 
     { 
 
      "publisher":"penguin", 
 
      "isbn": 124161256653, 
 
      "coverArtist":"Pain T Brush", 
 
      "amazonPrice":65.50 
 
     }, 
 
     { 
 
      "publisher":"orbit", 
 
      "isbn": 124163526653, 
 
      "coverArtist":"Pain T Brush", 
 
      "amazonPrice":25.99 
 
     } 
 
    ] 
 
}

То же самое с другими запросами. Если я ищу конкретный isbn, я хочу, чтобы его данные возвращались. Если я задаю диапазон цен > 500, я бы хотел только последнее издание (конечно же, вместе с информацией об авторе и названии). И, наконец, если я ищу Fantastic Queries and How to Index Them в title, я хочу, чтобы весь документ был возвращен со всей информацией об издании, поскольку я не указывал ничего конкретного для издания.

Я не знаю, как сделать запросы «развернуть» на определенные объекты в документе, так ли это возможно?

ответ

1

Попробуйте сделать объект редактирования в его собственный документ с отношениями родитель-ребенок.

https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child.html

Таким образом, вы будете иметь возможность запросить точные дочерние документы вам нужны. Если вам также нужен родительский, у каждого дочернего документа есть свойство _parent, которое вы можете использовать в поиске _id, чтобы вернуть родительский документ.

Вы все равно сможете найти родителя на основе дочерних атрибутов.

https://www.elastic.co/guide/en/elasticsearch/guide/current/has-child.html

+0

Будет ли он вернуть как родительский объект, а также соответствующие документы ребенка, когда я выполняю поиск имеет и ребенка? Эта страница не указывает, что она возвращает. – IronWaffleMan

+0

Я не уверен. Почему бы не сделать быстрый эксперимент и не увидеть? Хуже всего то, что вы можете выполнить два поиска, чтобы получить оба необходимых вам документа: родительский и дочерний. –

+1

Я сделал тест, к сожалению, ни один из запросов не получил как родительский, так и дочерний объект. Однако, если запрос возвращает дочерний элемент, он неизбежно имеет свойство '_parent', которое я могу использовать в поиске' _id' для возврата родительского документа, поэтому этого должно быть достаточно. Я согласен с вашим ответом, спасибо :) – IronWaffleMan