Как изменить значения логических полей в ElasticSearch от Python? - PullRequest
0 голосов
/ 01 ноября 2018

Я использую пакетasticsearch в Python для передачи данных между двумя различными средами эластичного поиска. Чтобы изменить значения (например, 0, 1, '0' и '1') логических полей на логические значения (true и false), я использую следующий скрипт:

for k, v in res['_source'].iteritems():

     if (k in boolean_fields) and (not isinstance(res['_source'][k], bool)):

         if res['_source'][k] in ['1', 1]:
            res_no_empty['_source'][k] = 'true'

         elif res['_source'][k] in ['0', 0]:
            res_no_empty['_source'][k] = 'false' 

response_list.append(res_no_empty)
bulk(es_destination, response_list, chunk_size=1000)

Тогда возникнет ошибка, потому что отображение этих полей логическое, а значения строковые.

Я также попробовал следующий скрипт (заменил 'true' на True и 'false' на False):

 if (k in boolean_fields) and (not isinstance(res['_source'][k], bool)):

     if res['_source'][k] in ['1', 1]:
        res_no_empty['_source'][k] = True

     elif res['_source'][k] in ['0', 0]:
        res_no_empty['_source'][k] = False 

, но в средеasticsearch ничего не показано для логических полей, которые имели значения в ['0', 0, '1', 1]; однако если исходное поле имеет значение true / false , эластичный поиск показывает правильные значения.

...