2015-02-09 3 views
6

Я пытаюсь написать запрос с помощью query_string для извлечения запросов данных вложенными объектами.Elasticsearch query_string вложенный запрос

Пример запроса я хотел бы сделать это один:

{ 
    "query": { 
    "query_string": { 
     "query": "a.id:2" 
    } 
    } 
} 

Где «а» вложенный объект, и «идентификатор» является полем «а».

Я знаю, что могу успешно выполнить эту задачу, используя при помощи вложенного запроса, написав запрос типа:

{ 
    "nested": { 
    "path": "a" 
    "query_string": { 
     "query": "a.id:2" 
    } 
    } 
} 

Однако, я хотел бы избежать. Я не хочу самостоятельно выяснять, что пользователь ищет вложенное поле и модифицирует запрос. Я попытался использовать параметр «fields», но похоже, что он не работает с вложенными объектами.

Можно ли написать этот запрос напрямую с помощью запросов «query_string»? Какую семантику можно получить? (например, если я пишу «a.id:2 И ab: 10», я сопоставляю два поля в одном и том же объекте или в разных объектах?)

+0

Я пытаюсь найти ответ на этот самый вопрос. Просто интересно, удалось ли вам найти какое-либо решение. Любая помощь будет замечательной! Спасибо – Vineet

+0

К сожалению, я не нашел решение. – Cale

ответ

7

Я делал больше исследований и нашел, что это может быть достигнуто путем установив для параметра include_in_parent значение true в отображении.

Теперь вы должны быть в состоянии сделать запрос как

{ 
    "query": { 
    "query_string": { 
     "query": "fields.fieldvalue:sometext" 
    } 
    } 
} 

Eg: -

"mappings": { 
     "documentmetadatavalue": { 
      "properties": { 
       "id": { 
        "type": "string" 
       }, 
       "fields": { 
       "type": "nested", 
       "include_in_parent": true, 
       "properties": { 
        "fieldId": {"type": "string"}, 
        "fieldvalue": {"type": "string"} 
       } 
       } 
      } 
     } 
    } 

Позвольте мне знать, если это помогает.

+4

То, что вы предлагаете, является хорошей альтернативой. Обратите внимание, однако, что с настройкой «include_in_parent» вы выравниваете вложенный ресурс как объект в родительском. Вы фактически переиндексируете документ как сплющенный объект. Вы теряете прекрасную функцию вложенных объектов. Например, если вы ищете родительские объекты, имеющие хотя бы один дочерний элемент с двумя атрибутами с определенным значением, запрос не будет проверять, чтобы атрибуты TWO имели эти значения в уникальном дочернем элементе. – Cale

+0

Ознакомьтесь с документацией о выпуске inner_hits, которая была недавно выпущена. Вы должны уметь работать с этой новой функцией. (https://www.elastic.co/guide/en/elasticsearch/reference/1.x/search-request-inner-hits.html#nested-inner-hits – Vineet

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