2013-06-04 63 views
1

我在使用與現有應用程序集成的彈性搜索時遇到了一些麻煩,但它應該是一個相當直接的問題。我能夠創建和銷燬索引,但出於某種原因,我無法將數據導入到彈性搜索和查詢中。彈性搜索[PUT]錯誤

我正在使用pyes庫,並誠實地找到文檔在這方面不太有用。這是我當前的代碼:

def initialize_transcripts(database, mapping): 
    database.indices.create_index("transcript-index") 


def index_course(database, sjson_directory, course_name, mapping): 
    database.put_mapping(course_name, {'properties': mapping}, "transcript-index") 
    all_transcripts = grab_transcripts(sjson_directory) 
    video_counter = 0 
    for transcript_tuple in all_transcripts: 
     data_map = {"searchable_text": transcript_tuple[0], "uuid": transcript_tuple[1]} 
     database.index(data_map, "transcript-index", course_name, video_counter) 
     video_counter += 1 
    database.indices.refresh("transcript-index") 


def search_course(database, query, course_name): 
    search_query = TermQuery("searchable_text", query) 
    return database.search(query=search_query) 

我首先創建數據庫,初始化索引,然後嘗試添加數據,並與第二兩種方法搜索。目前,我發現了以下錯誤:

raise ElasticSearchException(response.body, response.status, response.body) 
pyes.exceptions.ElasticSearchException: No handler found for uri [/transcript-index/test-course] and method [PUT] 

我不太知道如何處理它,我能找到這個錯誤的唯一參考建議事先創建索引,我相信我已經在做。有沒有人遇到過這個錯誤?或者,你是否知道任何我可能不知道的好地方?

任何幫助表示讚賞。

+0

不是一個答案,但我已經查看了一些彈性搜索庫,並且沒有一個是使用請求模塊與它進行交互的重大改進。有了彈性搜索的複雜的DSL,圖書館就有這麼多功能。一般來說你是如何找到皮耶斯的? –

+0

說實話,不是太棒了。它使簡單的事情變得微不足道,但文檔通常是缺乏的,它似乎混淆了ES擴展的許多有用的功能。您是否有任何資源僅通過請求模塊進行交互?我想我可能想切換到那個。 python中的 –

+0

這真的很容易。沒有任何最喜歡的鏈接,但谷歌可能是你的朋友。通過請求可以輕鬆發佈到帶有json有效內容的ES(查詢)。當你開始處理大量過濾器和facet時(僅限於IMO),將請求邏輯作爲json文檔並將其傳遞給ES非常好 - 就像在關係數據庫中存儲過程一樣。還愛python json庫將結果反序列化爲字典! –

回答

3

出於某種原因,將ID添加到索引中,儘管它顯示在起始文檔中:(http://pyes.readthedocs.org/en/latest/manual/usage.html)不起作用,並且實際上會導致此錯誤。

一旦我刪除video_counter參數索引,這工作完美。

+0

奇怪,請檢查您現在使用的文件是否爲id,可能是自動生成的,這可能不是您想要的。 – javanna

+0

它似乎是自動生成的,但我已經從Pyes上移開,只是太過頭疼而已。 –