【问题标题】:Elasticsearch indexing with Python UTF-8 problems带有 Python UTF-8 问题的 Elasticsearch 索引
【发布时间】:2015-04-20 16:25:28
【问题描述】:
我正在使用官方 python 库为 elasticsearch 上的数据建立索引:elasticsearch-py。使用 cx_oracle python 库直接从 oracle 获取数据,转换为文档格式并发送到 elasticsearch 进行索引。在大多数情况下,这很好用,但有时我会遇到像 ö 这样的字符的问题。有时这个字符被索引为\xc3\xb8,有时被索引为ö。即使在同一个数据库条目中也会发生这种情况。一个变量的 ö 索引可以正确,而对于另一个变量,情况并非如此。
有人知道是什么原因造成的吗?
提前致谢
【问题讨论】:
标签:
python
indexing
encoding
elasticsearch
【解决方案1】:
如果您的“ö”有时是正确的,有时是错误的,那么您的数据库中的数据一定已损坏。这不是 Elasticsearch 的问题。 (一个月前我也遇到过同样的问题!)
具有各种编码的字符串可能会放入您的数据库中,而之前没有全部转换为单一格式。
text = "ö"
asUtf=text.encode('UTF-8')
print(asUtf)
print(asUtf.decode())
结果:
b'\xc3\xb6'
ö
这个问题可以在插入 Elasticsearch 之前解决。找到匹配 '\xXX\xXX' 的文本序列,将它们视为 UTF-8 并将它们解码为 unicode。尝试清理您的数据库并修复您将信息放入其中的方式。
PS:将信息从数据库移动到 Elasticsearch 的更好做法是使用 rivers 或编写一个脚本,直接将数据发送到 Elasticsearch,而无需先将它们保存到文件中。
2016 年编辑:河流现已弃用,因此您应该找到 an alternative 之类的 logstash。