Эластичный поиск - доступ к элементу в списке - PullRequest
0 голосов
/ 23 октября 2018

Я относительно новичок в упругом поиске и у меня есть вопрос о доступе к элементу внутри элемента внутри списка.Структура выглядит следующим образом:

{  
   'TestA':'1',
   'TestB':{  
      'TestC':'2',
      'TestD':[  
         {  
            'TestE':'3',
            'TestF':'4'
         },
         {  
            'TestE':'5',
            'TestF':'6'
         }
      ]
   }
}

С этой следующей структурой я хочу вернуть все результаты запроса, в котором TestF имеет значение 6.Мне было интересно, возможно ли это с помощью следующего шаблона.

{  
   "query":{  
      "bool":{  
         "must":[  
            {  
               "match":{  
                  "TestB.TestD.TestF":'6'
               }
            }
         ]
      }
   }
}

Будет ли {"match" : { "TestB.TestD.TestF": '6'}} иметь возможность поиска по каждому элементу TestD, или мне нужно будет использовать какую-то другую команду для перебора списка?Это с упругим поиском 5.0.Заранее спасибо!

1 Ответ

0 голосов
/ 23 октября 2018

Да, ваш запрос match должен найти результаты, которые вы ищете.Elasticsearch выравнивает массивы, когда помещает их в инвертированный индекс.За дополнительной информацией обращайтесь к документам: https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html#_how_arrays_of_objects_are_flattened

Массивы внутренних полей object не работают так, как вы ожидаете.Lucene не имеет понятия внутренних объектов, поэтому Elasticsearch сглаживает иерархии объектов в простой список имен и значений полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...