簡體   English   中英

使用Python UTF-8問題進行Elasticsearch索引編制

[英]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並將其解碼為unicode。 嘗試清理數據庫並修復將信息放入內部的方式。

PS:將信息從數據庫移至Elasticsearch的一種更好的做法是使用河流或制作一個腳本,該腳本將數據直接發送到Elasticsearch,而無需先將其保存到文件中。

2016編輯:現在不建議使用河流,因此您應該找到諸如logstash 的替代方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM