2016-07-27 45 views
0

我有一個銀行賬戶數據集,其中包含字段賬號,狀態,名字,姓氏.iam編寫以下命令以更新來自狀態CA的所有客戶的名字記錄對安東尼。如何在基於字符串字段的彈性搜索中進行更新

curl -XPOST 'localhost:9200/bank/_update_by_query?pretty' -d '{ 
"query" : { 
    "term" : {"state":"CA"} 
}, 
"script" : { 
    "inline" : "ctx._source.firstname = a", 
    "params" : { 
    "a" : "antony" 
    }, 
    "lang" : "groovy" 
} 
}' 

結果:

{ 「發生」:3, 「TIMED_OUT」:假, 「總」:0, 「已更新」:0, 「批次」:0, 「version_conflicts」:0, 「noops」:0, 「重試」:0, 「失敗」:[] }的記錄

都未得到更新。

在此先感謝。

+0

您正在運行哪個版本的ES?你確定你已經[啓用動態腳本](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html#enable-dynamic-scripting)嗎? – Val

+0

版本2.3.4。是的,我啓用了動態腳本 –

+0

是'state'字段'分析'或'not_analyzed'?即如果單獨運行查詢,您會得到多少文檔? – Val

回答

1

由於您的stateanalyzed(默認),你需要使用一個match查詢,而不是term一個(或保持term查詢,但小寫CAca

curl -XPOST 'localhost:9200/bank/_update_by_query?pretty' -d '{ 
"query" : { 
    "match" : {"state":"CA"} 
}, 
"script" : { 
    "inline" : "ctx._source.firstname = a", 
    "params" : { 
    "a" : "antony" 
    }, 
    "lang" : "groovy" 
} 
}' 
+0

非常感謝。它的工作現在。 –

+0

太棒了,很高興它的工作! – Val

-2

如果你想更新您的歸檔狀態的映射,然後您首先需要刪除映射並在2.x中重新創建,因爲在更新它時不會在Es 2.2中正確更新您的映射。

按Elatic搜索文檔我們可以更新映射添加一個新的領域,但我們不能以not_analyzed現有字段從分析更改。

首先,您可以對映射進行備份。然後使用下面的鏈接將其刪除。 捲曲-XDELETE「http://host.sachin.com:9999/ecmviews/?pretty

刪除映射後,U可以在同一備份映射和更新狀態提交如下圖所示: 「狀態」:{ 「類型」:「串」, 「指數」 : 「not_analyzed」 },

和更新映射JSON使用以下命令: 捲曲-XPUT 'http://host.sachin.com:9999/ecmviews' -d「{ 你的映射JSON無捲曲backets } 。它會用ack:true作爲響應來更新映射。 更新映射後,您可以嘗試查詢。它會工作。

+0

這似乎是自我推銷,如果沒有在指南中完成,則被視爲垃圾郵件。請參閱:[如何不成爲垃圾郵件發送者](http://stackoverflow.com/help/promotion)。 – Makyen

+0

請將代碼和錯誤添加爲文本[使用代碼格式](http://stackoverflow.com/editing-help#code)。 – Makyen

相關問題