Я использую пакет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 , эластичный поиск показывает правильные значения.