當前位置:首頁 » 編程軟體 » yml腳本

yml腳本

發布時間: 2022-10-31 02:14:12

A. 如何使用Elasticsearch groovy script腳本更新數據

今天細說一下elasticsearch的update更新功能,以及如何利用script腳本更新數據。
想要使用script腳本功能,需要在配置文件elasticsearch.yml里設置

python

script.disable_dynamic: false

關於elasticsearch script的文章,總是會沒完沒了的修改

ES支持更新,但是更新的方式是通過一個提供的腳本進行的。ES的做法是,通過
index找到相應的存放記錄的節點,然後執行腳本,執行完之後,返回新的索引。實際上執行的是一個get和reindex的過程,在這個過程中,通過
versioning來控制沒有其它的更新操作(這個功能是0.19後可用的)。具體實現的原理應該和elasticsearch
Versioning相關。

B. 創造 | 一個強大的 Android 自動化打包腳本

該腳本是我在獨立開發過程中,為了提升 Android 應用打包和運營的效率而開發的腳本。項目地址是,

https://github.com/Shouheng88/autopackage

如項目中的語言構成展示的,該腳本完全使用 Python 語言開發完成。

使用起來非常簡單,首先你要准備如下的環境,

然後,通過編輯配置文件 config.yml 對腳本進行配置。比如,

YAML 格式也不算新穎,早在幾年之前的 SpringBoot 裡面就已經採用了這種格式。相比於使用 json 或者 properties 等格式的配置文件,它更加簡潔。

1、使用 gradle 指令自動打包,區分 32 位和 64 位 :因為現在有些應用市場明確要求區分 32 位和 64 位,所以,打包的時候要分開進行打包。

2、打包完成之後將 APK 拷貝到指定的目錄 :主要用來做本地的 APK 文件備份,後面也會用這里拷貝的 APK 文件進行自動化加固。

3、使用 diffuse 輸出相對於上一個版本的 APK 版本差異報告 :diffuse 是 JakeWharton 開發的 APK, AAB, AAR 和 JAR 的對比工具。這里我用它對比當前版本和上一個版本的 APK 的信息,以實現對 APK 質量的監控。diffuse 項目的地址是 https://github.com/JakeWharton/diffuse

3、拷貝多語言資源到指定的目錄,並自動提交到 Github 倉庫以便於協助翻譯 :對做國際化的應用的開發者而言,我們可以通過應用內的協助翻譯功能藉助社區的力量實現應用的多語言。這里我盡量將這個過程做得更加自動化。即在應用打包完成之後將應用內的多語言資源按照版本信息拷貝到指定的目錄下。然後使用 Git 工具將其推送到 Github 等。具體的效果可以參考 https://github.com/Shouheng88/LeafNote-Community .

4、自動打 tag 並提交到遠程倉庫 :該功能用來在打包完成之後使用為當前版本添加 Git tag,以便於後續根據版本回滾到指定的 Git 提交記錄。

5、根據 Git 提交記錄自動生成更新日誌 :上面做了為項目自動添加 Git tag 的功能之後,我們可以根據當前版本到上一版本之間的 Git 提交記錄的 comment 信息自動生成版本更新日誌。雖然,這個這樣生成的更新日誌並不能直接用作發布時的更新記錄,但在至少可以讓我們直觀得看到這個版本修改了什麼。

6、使用 360 加固 對上述 APK 進行加固並輸出到指定的目錄 :加固操作其實非常簡單,只需要一個 command 指令就可以完成了,

不過在使用上述命令之前需要先通過 GUI 的形式修改你在 360 加固中的渠道和簽名信息(直接手動改文件也可以)。

7、上傳打包 APK 到藍奏雲 :藍奏雲是現在很多開發者用來分享軟體的一個雲存儲平台,100M 以下的文件可以免費存儲,類似於網路雲。上傳藍奏雲之前需要先修改配置文件,

這里需要填入的 ylogin 和 phpdisk_info 可以在登錄之後通過 Chrome 的開發工具查看 cookie 信息得到。目前能夠做到自動化的一個方案就是使用上述兩個信息。

8、通過 Telegram bot 將打包完成的渠道包和更新日誌信息發送到 Telegram 群組 :對海外的用戶我們可以通過 Telegram 作為一個交流的渠道。Telegram 是一個非常好用的聊天軟體。它提供了 bot 功能,即一個可以推送消息的機器人。我們可以通過這個功能來在群組中推送消息、圖片和文件。Telegram 的 bot 有非常強大的自定義性。其實我們完全可以基於爬蟲和 bot 維護一個社區,然後通過在社區內推送廣告來獲得一些利益。這也不失為一個賺錢的渠道。使用 Telegram bot 之前需要在配置文件中填入如下信息,

這里的 token 是注冊 bot 的時候得到的信息。chat_id 可以通過如下方式獲取到:

即將 token 信息填入到上述 <YourBOTToken> 處。在返回的 json 結果中可以獲取到 chat id 信息。

向群組推送信息的方式非常簡單,一個 http 請求即可完成,

更多的協議可以參考這個文檔: https://core.telegram.org/bots/api#senddocument

9、完成上述操作之後使用郵件通知打包結果 :最後就是在完成了最終的打包操作之後通過 Email 發送一封郵件,內部包含了本次打包的 diff 信息等給指定的用戶。使用郵件功能需要在配置文件中填寫,

這里我們使用的是 QQ 郵箱來發送郵件。這里需要填寫的 user 和 password 欄位分別是郵箱和開通 smtp 服務時系統提供的密碼信息。QQ 郵箱開通 SMTP 伺服器其 官方文檔 即可。

上述是該打包腳本的主要功能。後續我會添加更多功能。因為時間有限,有些功能需要修改一下才能使用。不過,許多功能我都封裝成了獨立的 Python 腳本,如果需要的話可以自己做細微的修改。對於這個腳本,如果你有更好的建議和想法,可以跟我交流~

C. .yml是什麼文件

YML文件格式是YAML (YAML Aint Markup Language)編寫的文件格式,YAML是一種直觀的能夠被電腦識別的的數據數據序列化格式,並且容易被人類閱讀,容易和腳本語言交互的,可以被支持YAML庫的不同的編程語言程序導入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。

D. docker-compose.yml文件如何識別變數

這是一個新穎的想法,在碼農的IDE環境中,若是可以很方便地使用Docker,真是一件很有意思的事:對Dockerfile或者Compose YML文件進行語法高亮、自動補全、語法驗證,甚至還可以直接在IDE中啟動這個Docker容器來進行更深入的測試或者開發。讓懶惰的程序員們可以更高效地利用時間,專注於解決應用本身的問題。有興趣的小夥伴,可以搜搜有沒有更好的可以分享分享,或者幫助社區寫另一個優秀的工具出來。
這個博客帖子是關於如何集成Docker到我們的IDE中。讓我們有機會介紹一個Eclipse插件 doclipser ,可以在IDE中編輯,構建和運行Docker容器。

Docker的開發環境
在深入Docker和IDE細節之前,讓我們看看,為什麼得把Docker放進必需的開發工具列表中。
構建系統
首先,Docker能夠使我們的構建環境便攜,可重復以及保持隔離。舉個例子:你需要使用5.1版本的gcc工具構建一個C文件。 所有需要做的就是運行以下命令(當然,這里假定你已經安裝了Docker):
docker run gcc:5.1 gcc -o helloworld helloword.c

神奇的是,你可以在任何地方運行它,你不必理會依賴的庫文件、之前的沖突或者gcc的安裝。只要它能在你的筆記本上跑起來,也就可以在集成伺服器上運行了。
運行環境
同樣適用於運行時環境。如果你只想在tomcat 8上運行Java Web應用程序,可以只使用:
docker run tomcat:8 -v HelloWorld.war:/usr/local/tomcat/webapps/Helloworld.war

同樣,你不用擔心依賴性,平台配置或Linux發行版的差異,這些Docker都能搞定。
Docker和IDE
好吧,這應該很清楚,為什麼現在Docker對開發真的非常有用。就像我們描述的,你可以使用喜歡的shell來執行這些命令。 問題是,開發者都是懶惰的。這意味著,如果我們在最喜歡的IDE中碼字,就不希望跑到IDE外面來使用Docker。我們想直接從IDE中運行容器。
不幸的是,現在主要IDE都不支持Docker。
所以,你是不是很想看到IDE中集成了Docker?
你想要在容器中運行IDE?
docker run eclipse

汗,這不是容器的使用方式。在容器裡面運行圖形化應用程序,太過復雜也缺少可移植性。
你想要從IDE中運行容器?
是哦!我們希望能看到對Dockerfile,Docker Compose YML文件的支持,IDE構建系統和容器內的運行時環境。讓我們來看看詳細的需求:
Dockerfile的支持
Dockerfile支持應該帶有語法高亮顯示,自動補全(當按下Ctrl+SPACE鍵,dockerfile指令會自動彈出來)和語法驗證(在執行 docker build 之前,IDE要能指出語法錯誤)

Docker Compose YML文件的支持
更有意思的是對Docker Compose YML文件的支持。這將允許定義容器間的關系,如Link和Volume,也可以從你的編輯器一次啟動多個容器。真的很酷!

IDE構建系統
當然,你需要得到IDE中運行容器的支持。具體地,容器可以構建你的源文件。如果利用Docker多種語言特性,這可能變得更容易。

IDE運行時環境
我們期待IDE的最後一項功能,能夠啟動容器的運行時環境。

doclipser簡介
根據上述四個功能,我們構建了doclipser,一個Eclipse插件來編輯,構建和運行Docker容器。
doclipser支持Dockerfile:語法高亮顯示,自動補全和語法驗證。雖仍沒有支持Docker Compose YML文件,但已經可以執行一些Docker的命令,來構建源文件或啟動運行時環境。
doclipser不是唯一的Docker Eclipse插件。這里有一個很優秀的Eclipse Docker工具集(以下簡稱:EDT),由JBoss維護且和Eclipse的Linux工具包一起分發。 即使它們都能使大家在IDE中使用Docker,doclipser和EDT還是兩種不同的方法:
1、doclipser通過對Dockerfiles的支持,專注於編輯和運行容器,在未來的版本中,將提供對Docker Compose YML文件的支持。
2、EDT對Docker鏡像和容器擁有更高級的管理方式,但缺乏對Dockerfiles的支持。

E. 如何使用Elasticsearch groovy script腳本更新數據

用groovy腳本自定義ElasticSearch查詢,來實現以上功能。

例,數據中包含欄位birdtyday,記錄遊客生日:
"birthday": "1992-02-05 00:00:00",
新建文件getAgeByBirthday.groovy,編輯其內容為:

def b = doc[birthday_field].value
def birthday = new Date(b)
def now = new Date()
long age = (now -birthday)/365
age

並把此文件放在es的config/scripts目錄下(如果沒有此目錄就新建一個)。

然後在config/elasticsearch.yml文件中加一行:

script.groovy.sandbox.enabled: true

最後重啟es即可。
接下來,我們就可以用以下DSL進行年齡統計了

GET /lovingtrip-report/hotelcustomer/_search?search_type=count
{
"aggs": {
"counts_by_age": {
"terms": {
"script_file": "getAgeByBirthday",
"params": {
"birthday_field": "birthday"
},
"size": 100
}
}
}
}

或者:

GET /lovingtrip-report/hotelcustomer/_search?search_type=count
{
"aggs": {
"histogram_by_age": {
"histogram": {
"script_file": "getAgeByBirdthday",
"params": {
"birdthday_field": "birdthday"
},
"interval": 5
}
}
}
}

不過腳本查詢性能不佳,且不能利用es的緩存,所以在大數據量或高性能要求的場景下不適用。。

-------------------------------------
補充一個自定義的年齡range過濾:
range_AgeByBirthday.groovy:

def b = doc[birdthday_field].value
def birdthday = new Date(b)
def now = new Date()
long age = (now -birdthday)/365
gte<=age && age<=lte

DSL:

GET /lovingtrip-report/hotelcustomer/_search?search_type=count
{
"query": {
"filtered": {
"filter": {
"script": {
"script_file": "range_AgeByBirdthday",
"params": {
"birdthday_field": "birdthday",
"gte": 50,
"lte": 60
}
}
}
}
},
"aggs": {
"histogram_by_age": {
"histogram": {
"script_file": "getAgeByBirdthday",
"params": {
"birdthday_field": "birdthday"
},
"interval": 5
}
}
}
}

F. HttpRunner回放錄制的har轉yml和json腳本報錯

好厲害的樣子。感覺受到打擊了

G. 如何使用Elasticsearch groovy script腳本更新數據

想要使用script腳本功能,需要在配置文件elasticsearch.yml里設置

Python

script.disable_dynamic: false

關於elasticsearch script的文章,總是會沒完沒了的修改

ES支持更新,但是更新的方式是通過一個提供的腳本進行的。ES的做法是,通過
index找到相應的存放記錄的節點,然後執行腳本,執行完之後,返回新的索引。實際上執行的是一個get和reindex的過程,在這個過程中,通過
versioning來控制沒有其它的更新操作(這個功能是0.19後可用的)。具體實現的原理應該和elasticsearch
Versioning相關。

get,reindex的含義是,ES先取出這條記錄,然後根據新數據生成新記錄,然後在把新記錄放回到ES中(並不會覆蓋老的記錄)。

現在沒有數據,首先我們需要創建一條記錄

Python

$ curl -XPUT localhost:9200/xiaorui.cc/blog/1 -d '{
"counter" : 1,
"tags" : ["red"]
}'

$ curl -XPUT localhost:9200/xiaorui.cc/blog/1 -d '{
"counter" : 1,
"tags" : ["red"]
}'

直接修改數據,一定要注意,直接update的化,會覆蓋以前的數據,另外update的時候,需要/index/type/id ,一定要帶著id。 elasticsearch 應該不支持搜索query方式update修改數據。

Python

curl -XPUT 'localhost:9200/xiaorui.cc/blog/1?pretty' -d '
{
"name": "xiaorui.cc"
}'

curl -XPUT 'localhost:9200/xiaorui.cc/blog/1?pretty' -d '
{
"name": "xiaorui.cc"
}'

elasticsearch提供了doc這個局部更新參數,他可以局部修改,而不會直接覆蓋以前的數據,這會針對特定的k v,欄位修改。

Python

curl -XPOST 'localhost:9200/xiaorui.cc/blog/1/_update?pretty' -d '
{
"doc": { "name": "ruifengyun" }
}'

curl -XPOST 'localhost:9200/xiaorui.cc/blog/1/_update?pretty' -d '
{
"doc": { "name": "ruifengyun" }
}'

當Elasticsearch API不能滿足要求時,Elasticsearch允許你使用腳本實現自己的邏輯。腳本支持非常多的API,例如搜索、排序、聚合和文檔更新。腳本可以通過請求的一部分、檢索特殊的.scripts索引或者從磁碟載入方式執行。

下面是es script的用法,這些腳本是groovy開發的。 下面的語句的意思是說,將counter的值加4

Python

$ curl -XPOST 'localhost:9200/xiaorui.cc/blog/1/_update' -d '{
"script" : "ctx._source.counter += count",
"params" : {
"count" : 4
}
}'

$ curl -XPOST 'localhost:9200/xiaorui.cc/blog/1/_update' -d '{
"script" : "ctx._source.counter += count",
"params" : {
"count" : 4
}
}'

通過上面的例子,我們知道tags是個列表,如果用doc局部更新的語法,他是無法做到append的,還是會覆蓋tags這個欄位。 那麼怎麼實現列表擴展? 請使用elasticsearch script實現。

Python

$ curl -XPOST 'localhost:9200/xiaorui.cc/blog/1/_update' -d '{
"script" : "ctx._source.tags += tag",
"params" : {
"tag" : "white"
}
}'

$ curl -XPOST 'localhost:9200/xiaorui.cc/blog/1/_update' -d '{
"script" : "ctx._source.tags += tag",
"params" : {
"tag" : "white"
}
}'

_update也支持upsert功能,沒有這個欄位或者key,也會添加這個記錄。下面是一個例子,如果沒有counter欄位,則插入該欄位:

Python

$ curl -XPOST 'localhost:9200/xiaorui.cc/blog/1/_update' -d '{
"script" : "ctx._source.counter += count",
"params" : {
"count" : 4
},
"upsert" : {
"counter" : 1
}
}'

$ curl -XPOST 'localhost:9200/xiaorui.cc/blog/1/_update' -d '{
"script" : "ctx._source.counter += count",
"params" : {
"count" : 4
},
"upsert" : {
"counter" : 1
}
}'

下面我們來復雜點的groovy script腳本用法. 當你的source沒有china這個key,那麼我會增加一個kv

Python

curl -XPOST "http://localhost:9200/xiaorui.cc/blog/80/_update" -d'
{
"script": "if (!ctx._source.containsKey(\"china\")) { ctx._source.attending = newField }",
"params" : {"newField" : "blue" },
"myfield": "data"
}'

curl -XPOST "http://localhost:9200/xiaorui.cc/blog/80/_update" -d'
{
"script": "if (!ctx._source.containsKey(\"china\")) { ctx._source.attending = newField }",
"params" : {"newField" : "blue" },
"myfield": "data"
}'

下面的script語法相對復雜的,會遍歷一組字典,然後進行判斷賦值。

{
「55555″: 22,
「name」: 「lisi」,
「distr_pan」: [
{
「k」: 15,
「v」: 15
},
{
「k」: 20,
「v」: 20
}
]
}

Python

$ curl -XPUT 'localhost:9200/xiaorui.cc/blog/9123/_update' -d '
{
"script" : "def x = false;ctx._source.distr_pan.each({if(it.get('k')==target){x=true}});if(x){ctx._source.distr_pan +=v}",
"params":{
"v":{"k":nlp, "v":35},
"target":15
}
}

$ curl -XPUT 'localhost:9200/xiaorui.cc/blog/9123/_update' -d '
{
"script" : "def x = false;ctx._source.distr_pan.each({if(it.get('k')==target){x=true}});if(x){ctx._source.distr_pan +=v}",
"params":{
"v":{"k":nlp, "v":35},
"target":15
}
}

elasticsearch script就講解到這里了,很多例子已經簡單明了…
script貌似不是很安全,最少遠程代碼執行的漏洞暴露過幾次了. 下次把python版的script走一遍試試
望採納

H. 如何使用Elasticsearch groovy script腳本更新數據

Python

script.disable_dynamic: false

關於elasticsearch script的文章,總是會沒完沒了的修改

ES支持更新,但是更新的方式是通過一個提供的腳本進行的。ES的做法是,通過
index找到相應的存放記錄的節點,然後執行腳本,執行完之後,返回新的索引。實際上執行的是一個get和reindex的過程,在這個過程中,通過
versioning來控制沒有其它的更新操作(這個功能是0.19後可用的)。具體實現的原理應該和elasticsearch
Versioning相關。

I. 如何使用Elasticsearch groovy script腳本更新數據

用groovy腳本自定義ElasticSearch查詢,來實現以上功能。

例,數據中包含欄位birdtyday,記錄遊客生日:
"birthday": "1992-02-05 00:00:00",
新建文件getAgeByBirthday.groovy,編輯其內容為:

def b = doc[birthday_field].value
def birthday = new Date(b)
def now = new Date()
long age = (now -birthday)/365
age

並把此文件放在es的config/scripts目錄下(如果沒有此目錄就新建一個)。

然後在config/elasticsearch.yml文件中加一行:

script.groovy.sandbox.enabled: true

最後重啟es即可。
接下來,我們就可以用以下DSL進行年齡統計了

GET /lovingtrip-report/hotelcustomer/_search?search_type=count
{
"aggs": {
"counts_by_age": {
"terms": {
"script_file": "getAgeByBirthday",
"params": {
"birthday_field": "birthday"
},
"size": 100
}
}
}
}

或者:

GET /lovingtrip-report/hotelcustomer/_search?search_type=count
{
"aggs": {
"histogram_by_age": {
"histogram": {
"script_file": "getAgeByBirdthday",
"params": {
"birdthday_field": "birdthday"
},
"interval": 5
}
}
}
}

不過腳本查詢性能不佳,且不能利用es的緩存,所以在大數據量或高性能要求的場景下不適用。。

-------------------------------------
補充一個自定義的年齡range過濾:
range_AgeByBirthday.groovy:

def b = doc[birdthday_field].value
def birdthday = new Date(b)
def now = new Date()
long age = (now -birdthday)/365
gte<=age && age<=lte

DSL:

GET /lovingtrip-report/hotelcustomer/_search?search_type=count
{
"query": {
"filtered": {
"filter": {
"script": {
"script_file": "range_AgeByBirdthday",
"params": {
"birdthday_field": "birdthday",
"gte": 50,
"lte": 60
}
}
}
}
},
"aggs": {
"histogram_by_age": {
"histogram": {
"script_file": "getAgeByBirdthday",
"params": {
"birdthday_field": "birdthday"
},
"interval": 5
}
}
}
}

熱點內容
c語言跳出死循環 發布:2025-05-15 20:06:04 瀏覽:823
a19處理器相當於安卓哪個水平 發布:2025-05-15 20:05:29 瀏覽:638
榮耀9i安卓強行關機按哪個鍵 發布:2025-05-15 20:00:32 瀏覽:749
密碼鎖寫什麼最好 發布:2025-05-15 19:05:31 瀏覽:782
5的源碼是 發布:2025-05-15 19:04:07 瀏覽:719
c語言創建的源文件 發布:2025-05-15 18:54:08 瀏覽:611
3個數字密碼鎖有多少種 發布:2025-05-15 18:49:48 瀏覽:684
壓縮包手機打開 發布:2025-05-15 18:37:34 瀏覽:217
安卓取消耳機模式怎麼取消 發布:2025-05-15 18:24:24 瀏覽:59
氣球怎麼解壓視頻 發布:2025-05-15 18:20:00 瀏覽:783