2016-03-18 2 views
5

Возможно ли получить данные полей из родительского и дочернего в одном запросе elasticsearch? По сути, я пытаюсь захватить данные для нескольких родительских полей и нескольких дочерних полей в одной итерации с фильтрацией. Я пробовал различные методы привязки информации к одному запросу, но не смог выяснить, как это сделать. Вот как мое отображение выглядит следующим образом: -Получите данные о множественном поле как от родителя, так и от ребенка в одном запросе elasticsearch

Родитель:

_id_parent : values {1} 
_source: {_date (20160316), _time (20160316010000), _id_source (test), _year (2016), _month (1)} 

ребенок:

_id_child : values {1} 
_source: {_id_child (1), _id_parent (1), _child_question (q1), _child_answer (This needs to be done.)} 

Ожидаемый результат (что-то подобное ниже):

(PARENT) 
     "hits" : { 
     "total" : 1, 
     "max_score" : 1.0, 
     "hits" : [ { 
      "_index" : "index", 
      "_type" : "parent", 
      "_id" : "1", 
      "_score" : 1.0, 
      "_source":{_id_parent":"1","_id_source":"test","_date":"20160316","_time":"20160316010000","_year":2016,"_month":"1"} 
     } ] 
     } 
     (CHILD) 
      "hits" : { 
      "total" : 1, 
      "max_score" : 1.0, 
      "hits" : [ { 
       "_index" : "index", 
       "_type" : "child", 
       "_id" : "1", 
       "_score" : 1.0, 
       "_source":{"_id_child":"1", "_child_question":"q1","_child_answer":"This needs to be done."} 
      } ] 
      } 

Ссылки:

https://github.com/elastic/elasticsearch/issues/761

https://www.elastic.co/guide/en/elasticsearch/guide/current/children-agg.html

curl -XGET "$ELASTICSEARCH_ENDPOINT/index/parent/_search?pretty=true" -d " 
    { 
     "query": { 
      "match": { 
       "_id_parent": "1" 
       } 
      }, 
      "size" : 10, 
      "aggs": { 
       "_id_parent": { 
        "terms": { 
         "field":"_id_parent", 
         "field":"_id_source", 
         "field":"_date", 
         "field":"_time", 
         "field":"_year", 
         "field":"_month", 
         }, 
        "aggs": { 
         "child": { 
          "children": { 
           "type": "child" 
           }, 
          "aggs": { 
           "child": { 
            "terms": { 
             "field": "child._id_child", 
             "field": "child._child_question", 
             "field": "child._child_answer", 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    }" 
+0

Это работало для вас? – Righto

ответ

2

Я сделал некоторые предположения ... пусть меня знать, если они правильны

  1. Вы хотите документ из родительского отображения, который имеет идентификатор документа = 1
  2. Вы также хотите, чтобы все дочерние документы, которые pARENT_ID = 1
  3. Вы передаете этот parent_id из своего кода в elasticsearch.
  4. Вы не просите elasticsearch фильтровать через несколько родительских документов. Перед тем как нажать elasticsearch, вы уже знаете, что вы хотите, родительский документ с идентификатором = 1

Если это так, то вы можете создать два отдельных запросов

Первый запрос будет «получить родительский документ с идентификатором = 1"
Второй запрос будет „получить все дочерние документы с parent_id = 1“

И вы можете использовать elasticsearch в „Multisearch API“, чтобы отправить оба эти запросы elasticsearch в одной сети вызова

MultiSearch API

6

Это звучит как работа для inner hits. Эта функция позволяет вам получить хиты, которые сделали матч has_child или has_parent.

В вашем случае, если вы хотите сделать запрос к родителю, с тривиальным has_child (т.е. match_all) или наоборот, например, что-то вроде

{ 
    "query" : { 
     "has_child" : { 
      "type" : "child", 
      "query" : { 
       "match_all": {} 
      }, 
      "inner_hits" : {} 
     } 
    } 
} 
+0

Как бы добавить фильтр в родительские атрибуты в том же запросе? – Righto

+0

Можете ли вы фильтровать родительские записи в определенных полях, прежде чем фильтровать их детей? – Righto

+0

Это должен быть «обычный» фильтр/запрос, т. Е. Создать запрос bool, содержащий как has_child, так и (например) запрос/фильтр терминов на родительском –

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