簡體   English   中英

Python requests.post 不會強制 Elasticsearch 創建缺失的索引

[英]Python requests.post does not force Elasticsearch to create missing index

我想使用以下命令將數據推送到我的 Elasticsearch 服務器:

requests.post('http://localhost:9200/_bulk', data=data_1 + data_2)

它抱怨該索引不存在。 我嘗試手動創建索引:

    curl -X PUT http://localhost:9200/_bulk

它抱怨我沒有給它喂食:

    {"error":{"root_cause":[{"type":"parse_exception","reason":"request body is required"}],"type":"parse_exception","reason":"request body is required"},"status":400}

這里似乎有點雞和蛋的問題。 如何創建該_bulk索引,然后發布我的數據?

編輯:

我的數據非常大,甚至無法理解模式。 這是一個小片段:

'{"create":{"_index":"products-guys","_type":"t","_id":"0"}}\n{"url":"http://www.plaisio.gr/thleoraseis/tv/tileoraseis/LG-TV-43-43LH630V.htm","title":"TV LG 43\\" 43LH630V LED Full HD Smart","description":"\\u039a\\u03b1\\u03b9 \\u03cc\\u03bc\\u03bf\\u03c1\\u03c6\\u03b7 \\u03ba\\u03b1\\u03b9 \\u03ad\\u03be\\u03c5\\u03c0\\u03bd\\u03b7, \\u03bc\\u03b5 \\u03b9\\u03c3\\u03c7\\u03c5\\u03c1\\u03cc \\u03b5\\u03c0\\u03b5\\u03be\\u03b5\\u03c1\\u03b3\\u03b1\\u03c3\\u03c4\\u03ae \\u03b5\\u03b9\\u03ba\\u03cc\\u03bd\\u03b1\\u03c2 \\u03ba\\u03b1\\u03b9 \\u03bb\\u03b5\\u03b9\\u03c4\\u03bf\\u03c5\\u03c1\\u03b3\\u03b9\\u03ba\\u03cc webOS 3.0 \\u03b5\\u03af\\u03bd\\u03b1\\u03b9 \\u03b7 \\u03c4\\u03b7\\u03bb\\u03b5\\u03cc\\u03c1\\u03b1\\u03c3\\u03b7 \\u03c0\\u03bf\\u03c5 \\u03c0\\u03ac\\u03b5\\u03b9 \\u03c3\\u03c4\\u03bf \\u03c3\\u03b1\\u03bb\\u03cc\\u03bd\\u03b9 \\u03c3\\u03bf\\u03c5","priceCurrency":"EUR","price":369.0}\n{"create":{"_index":"products-guys","_type":"t","_id":"1"}}\n{"url":"http://www.plaisio.gr/thleoraseis/tv/tileoraseis/Samsung-TV-43-UE43M5502.htm","title":"TV Samsung 43\\" UE43M5502 LED ...

這本質上是別人的代碼,我需要工作。 我傳遞給 PUT 方法的“數據”對象似乎是一個字符串。

當我使用requests.post('http://localhost:9200/_bulk', data=data)

我得到<Response [406]>

如果您想使用requests進行批量requests

response = requests.post('http://localhost:9200/_bulk', data= data=data_1 + data_2, headers={'content-type':'application/json', 'charset':'UTF-8'}) 

舊答案

我建議使用 python 庫中的批量助手

from elasticsearch import Elasticsearch, helpers

client = Elasticsearch("localhost:9200")

def gendata():
    mywords = ['foo', 'bar', 'baz']
    for word in mywords:
        yield {
            "_index": "mywords",
            "word": word,
        }

resp = helpers.bulk(
client,
gendata(),
index = "some_index",
)

如果您沒有觸及 elasticsearch 配置,則會在文檔索引上創建一個新索引。

關於你嘗試的方法:

  1. 可能查詢格式不正確。 批量攝取身體形狀與將文檔作為 json 數組發送不同。

  2. 您正在執行 PUT 而不是發布,您必須指定要攝取的文檔。

無需先創建空索引。 萬一你想做,你可以這樣做:

curl -X PUT http://localhost:9200/index_name

暫無
暫無

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

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