2016-12-05 7 views
0

У меня есть вопрос о запросе query_string в ElasticSearch. Я хочу создать полнотекстовый поиск по всем типам и полям в индексе. Выполняется ли строка query_string против вложенных объектов? Например, у меня есть это отображениеElasticearch вложенный объект query_string

{ 
    "my_index": { 
    "mappings": { 
     "my_type": { 
     "properties": { 
      "group": { 
      "type": "string" 
      }, 
      "user": { 
      "type": "nested", 
      "properties": { 
       "first": { 
       "type": "string" 
       }, 
       "last": { 
       "type": "string" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

И запрос

GET /my_index/_search 
{ 
    "query": { 
     "query_string" : { 
      "query" : "paul" 
     } 
    } 

} 

Итак, когда я звоню запрос, будет ES поиск во всех областях, включая вложенные или только в my_type объекта и для вложенного поиска Я должен будет использовать вложенный запрос?

ответ

1

Вы не можете ссылаться на вложенные поля из query_string в корне. то есть это не будет работать:

{ 
    "query": { 
     "query_string": { 
      "query": "myNestedObj.myTextField:food" 
     } 
    } 
} 

Для поиска в конкретных вложенных полей, необходимо использовать вложенную положение:

{ 
    "query": { 
     "nested": { 
     "path": "myNestedObj", 
     "query": { 
     "query_string": { 
      "query": "myNestedObj.myTextField:food" 
     } 
     } 
     } 
    } 
    } 
} 

Однако, я обнаружил, что псевдо-поле «_all» делает включают в себя вложенные поля, так что этот запрос будет найти документы, содержащие «пищу» в myNestedObj.myTextField (а также, как и везде)

{ 
    "query": { 
     "query_string": { 
      "query": "_all:food" 
     } 
    } 
} 
+0

Благодаря @anthonybruni, «Тем не менее, я обнаружил, что псевдо-поле„_all“ включает вложенные поля, поэтому этот запрос wo uld найти документы, содержащие «питание» в myNestedObj.myTextField (как и где-нибудь еще) », этот ответ был именно тем, что я просил – Pauli

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