Elasticsearch 索引有 Python 个 UTF-8 问题

Elasticsearch indexing with Python UTF-8 problems

我为此使用官方 python 库在 elasticsearch 上索引数据:elasticsearch-py。使用 cx_oracle python 库直接从 oracle 获取数据,转换为文档格式并发送到 elasticsearch 进行索引。在大多数情况下,这很好用,但有时我会遇到像 ö 这样的字符的问题。有时这个字符索引为 \xc3\xb8,有时索引为 ö。即使在同一个数据库条目中也会发生这种情况。一个变量的 ö 索引可以是正确的,而对于另一个变量,情况并非如此。

有人知道是什么原因造成的吗?

提前致谢

如果您的“ö”有时正确 - 有时不正确,则数据库中的数据一定已损坏。这不是 Elasticsearch 的问题。 (一个月前我遇到了完全相同的问题!)

具有各种编码的字符串很可能在之前未全部转换为单一格式的情况下被放入您的数据库中。

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

结果:

b'\xc3\xb6'

ö

在插入Elasticsearch之前可以解决这个问题。找到匹配 '\xXX\xXX' 的文本序列,将它们视为 UTF-8 并将它们解码为 un​​icode。尝试清理您的数据库并修复您将信息放入其中的方式。

PS:将信息从数据库移动到 Elasticsearch 的更好做法是使用 rivers 或制作一个脚本,直接将数据发送到 Elasticsearch,而不将它们保存到文件中首先.

2016 编辑:河流现在已被弃用,所以你应该找到 像 logstash。