2014-10-03 118 views
2

我在Windows 7上使用angularjs和oracle的elasticsearch。 它的工作更&更細(感謝stackoverflower幫助)。我有一個彈性搜索的問題:我的文檔中的元素數量在增加,我不知道爲什麼/如何。 由elasticsearch索引的我的oracle表包含12010個元素,現在我在彈性文檔中獲得了84070個元素(經常由curl _count檢查):所以它現在重複數據7次。前幾天我重新編制了索引表,但是我之前刪除了elasticsearch「data」文件夾。elasticsearch數據增加和重複在每次重新啓動

數據似乎增加每次我重新啓動Windows。

感謝您的幫助。

這是我的我是如何安裝和索引數據:


我這樣做只是第一次:


創建索引

curl -XPOST 'localhost:9200/donnees' 

映射:

curl -XPUT 'localhost:9200/donnees/specimens/_mapping' -d '{ 
"specimens" : { 
    "_all" : {"enabled" : true}, 
    "_index" : {"enabled" : true}, 
    "_id" : {"index": "not_analyzed", "store" : false}, 
    "properties" : { 
     "O_OCCURRENCEID"        : {"type" : "string", "store" : "no","index": "not_analyzed" } , 
      .... 
     "I_INSTITUTIONCODE"        : {"type" : "string", "store" : "yes","index": "analyzed" } 
    } 
}}' 

查詢Oracle和索引數據:

curl -XPUT 'localhost:9200/_river/donnees_s/_meta' -d '{ 
"type" : "jdbc", 
"jdbc" : { 
    "index" : "donnees", 
    "type" : "specimens", 
    "url" : "jdbc:oracle:thin:@localhost:1523:recolnat", 
    "user" : "user", 
    "password" : "password", 
    "sql" : "select * from all_specimens_data" 
    } 
}' 

(這是正確的??如果我用「curl -XPUT'localhost:9200/donnees/samples/_meta'替換」curl -XPUT'localhost:9200/_river/donnees_s/_meta'「,我就用它來查詢),它不起作用。

測試:

curl -XGET 'http://localhost:9200/donnees/specimens/_count?q=*' 
    => 12010 
curl -XGET 'http://localhost:9200/donnees/specimens/_search?q=P00009359' 
    => return data ok 
+0

您的選擇中是否應該有一個'_id'列用於正確識別已加載的行? – 2014-10-03 08:15:45

+0

列「O_OCCURRENCEID」是我的數據庫表中唯一的ID。 您在映射中談論此行: 「_id」:{「index」:「not_analyzed」,「store」:false}? – AlainIb 2014-10-03 08:52:26

+0

我的意思是像'選擇O_OCCURRENCEID作爲_id .... blahblah ...' – 2014-10-03 09:12:03

回答

3

解決由於康斯坦丁V. Salikhov

每次elasticsearch服務啓動查詢與提供給_river的SQL數據庫,並獲取數據(見我以前的「查詢Oracle和索引。數據:「)如果數據沒有」_id「列_river無法確定它已經加載哪些記錄並且每次都重複數據。 10爲了避免重複我編輯數據庫中的「all_specimens_data」表(其實是一個避免修改數據庫的視圖)並將「O_OCCURRENCEID」重命名爲「_id」,「O_OCCURRENCEID」是我的主鍵UUID。

希望這有助於其他

+1

換句話說,不是使用'select * from [my_sql_table]'創建索引,而是將'select [sql_pk]'創建爲'_id',* from [my_sql_table]'。當然,除非你真的有意,否則你不應該選擇*。重要的是不要讓elasticsearch生成一個新的PK。 – northben 2014-10-08 23:31:17

相關問題