【问题标题】: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 并将它们解码为 un​​icode。尝试清理您的数据库并修复您将信息放入其中的方式。

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

    2016 年编辑:河流现已弃用,因此您应该找到 an alternative 之类的 logstash。

    【讨论】:

    • 点击 rivers 时,它说 Rivers 在 Elasticsearch 1.5 中已被弃用,并在 Elasticsearch 2.0 中被删除。 出于好奇,任何其他直接将数据发送到 ES 的方式,无需脚本?
    • 由于河流已被弃用,您将不得不使用类似 logstash 的替代方案。看看这个:stackoverflow.com/questions/29674974/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多