2014-12-30 50 views
0

(第一閱讀這篇文章How to use Elastic Search on top of a pre-existing SQL Database?)我目前使用MySQL,但我試圖改變使用ElasticSearch作爲我們的搜索引擎。我使用下面的捲曲請求遷移表通過Elastic Search River JDBC彈性搜索:ElasticSearch複製指數

curl -XPUT 'localhost:9200/_river/table_river/_meta' -d '{ 
"type" : "jdbc", 
"jdbc" : { 
    "url" : 'localhost:9200/blah', "user" : "x", "password" : "x", 
    "sql" : "select some_field as _id, * From some_table", 
    "index": "some_index", 
    "type" : "some_type", 
    "schedule" : "0 0-59 0-23 ? * *" 
} 
}' 

要保持彈性搜索和同步MySQL表,我使用的調度參數爲每分鐘運行和拉表到彈性搜索,但在執行過程中彈性搜索創建重複的指標,我得到如下結果:

complete: river jdbc/table_river metrics: 21123 rows 

一分鐘後,河水執行一次我得到如下回應:

complete: river jdbc/table_river metrics: 42246 rows 

我的「index_total」從21125增加到42248到63371,但文檔總數保持不變:21125

我可能沒有正確地做事。我會首先接受一篇文章的網址,而不是某個人告訴我如何去做。我首先做了一些公平的研究。

Avoid rebuilding index through jdbc-river on elasticsearch

elasticsearch data increase & duplicate at each restart

+0

什麼叫重複的指數是什麼意思?你能嘗試描述你想要做什麼嗎?也許一個快速更新添加一些日誌錯誤 – eliasah

+0

作出我的描述,希望你能幫助我 – mxlfa

+0

這似乎是你誤解了Elasticsearch JDBC河插件實際上是如何工作的。爲什麼你需要保持數據庫和elasticsearch同步?你多長時間在數據庫中插入/更新元素? – eliasah

回答

3

這將是真正的低效率,從表中的所有數據重新索引ES的每一分鐘。我建議的是,當你從mySQL插入/更新時,把該表的主鍵放入一個排隊系統(我們使用rabbitMQ)。然後,您可以擁有1,2或100位採集數據的兔子消費者,以某種方式對其進行轉換,然後插入到ElasticSearch中。

這種解決方案的優點在於它解決了這個問題爲新的和現有的數據。要回填整個表格,只需將所有主鍵插入到隊列中,然後讓隊列使用者填入ElaticSearch。

而且,這樣一來你只是在做工作的時候你需要,而不是每一分鐘。