2015-02-19 3 views
0

Я индексирую данные по elasticsearch, используя официальную библиотеку python для этого: elasticsearch-py. Данные напрямую берутся из oracle, используя библиотеку python cx_oracle, отбрасываются в формат документа и отправляются для индексирования в elasticsearch. По большей части это отлично работает, но иногда я сталкиваюсь с проблемами с такими персонажами, как ö. Иногда этот символ индексируется как \ xc3 \ xb8, а иногда как ö. Это происходит даже в той же записи базы данных. Одна переменная может иметь правильную индексацию ö, а для другой переменной это не так.Индексация Elasticsearch с проблемами Python UTF-8

Есть ли у кого-нибудь идеи, что может вызвать это?

заранее спасибо

ответ

1

Если «ö» иногда прямо - а иногда нет, данные должны быть повреждены в вашей базе данных. Это не проблема Elasticsearch. (У меня была одна и та же проблема месяц назад!)

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

text = "ö" 
asUtf=text.encode('UTF-8') 
print(asUtf) 
print(asUtf.decode()) 

Результат:

Ь '\ xc3 \ XB6'

ö

Эта проблема может быть решена до введения в Elasticsearch. Найдите текстовые последовательности, соответствующие «\ xXX \ xXX», обрабатывайте их как UTF-8 и декодируйте их в unicode. Попробуйте очистить базу данных и исправить то, как вы размещаете информацию внутри.

PS: Лучшая практика для перемещения информации из базы данных в Elasticsearch должна использовать rivers или создать скрипт, который будет напрямую отправлять данные в Elasticsearch, не сохраняя их сначала в файле.

2016 Редактировать: реки теперь устарели, поэтому вы должны найти an alternative, как и logstash.

+0

При нажатии [реки] (https://www.elastic.co/guide/en/elasticsearch/rivers/current/index.html) говорится: ** Реки были устарели в Elasticsearch 1.5 и удалены в Elasticsearch 2.0. ** Просто из любопытства, любой другой способ отправить данные непосредственно в ES без скрипта? –

+0

Поскольку реки устарели, вам придется использовать альтернативу, например, logstash. Посмотрите на это: http://stackoverflow.com/questions/29674974/alternatives-to-elasticsearch-river-plugins/ – Heschoon

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