elasticsearch 的 update by query 使用案例
為了優化我的查詢時間,我想要跳過巢狀查詢和父子關聯查詢,其實有很多時候我的查詢條件,關注的是有沒有,而不是 是什麼。
所以我完全可以通過打標籤的方式,跳過巢狀查詢和父子關聯查詢。
舉個例子:我的軟體資訊是巢狀型別的,而我展示結果的時候想要把帶有軟體資訊的放在前邊展示。這個需求裡邊我並不關注軟體的內容,關注的只是有軟體資訊的。但是我查詢條件在做打分排序的時候,我需要對軟體的欄位進行should,它是巢狀查詢的。
基於以上想法,我想把包含軟體資訊的打上一個標籤:這樣我查的時候,只需要對非巢狀型別的標籤進行should,跳過了巢狀查詢。
所以用到了這條語句:update_by_query
為了實現這個需求,我也是努力的檢視了官網,但是感覺還是不是很清晰,又問了elasticsearch社群的人。最終把這個語句寫出來了!
但是還有一些問題,下邊介紹。先介紹語句。
先介紹一下使用的兩個栗子,基本上也就兩種情況了,一種是原來沒有值,然後新增值;一種是原來有值,然後修改。
# # 情景一:update_by_query,其中update的內容為新增的內容
為了方便以後擴充套件,我這個標籤是兩層。外層是 labels ,第二層是:hasSoftType
POST device_search_20200716/_update_by_query?conflicts=proceed&timeout=1d&&slices=5
{
"script": {
// labels 是一級欄位 params是下邊定義的,裡邊存放著二級欄位,和二級欄位的值
"source": "ctx._source.put('labels',params.labels)",
"lang": "painless",
"params":{
"labels":{
"hasSoftType":"1"
}
}
},
"query": {
"bool": {
"must": [
{
"exists": {
"field": "deviceInfo.deviceType"
}
}
],
"must_not": [
{
"term": {
"labels.hasSoftType": {
"value": "1"
}
}
}
]
}
}
}
# # 情景二:update_by_query,其中update的內容為修改的內容
執行這個的時候,如果要修改的欄位沒有內容會報錯
POST device_search_20200716/_update_by_query?conflicts=proceed
{
"script": {
"source": "ctx._source['labels'].hasSoftType='2';",
"lang": "painless"
},
"query": {
"bool": {
"must": [
{
"exists": {
"field": "deviceInfo.deviceType"
}
}
],
"must_not": [
{
"term": {
"labels.hasSoftType": {
"value": "1"
}
}
}
]
}
}
}
# # 情景三:update_by_query,其中update的欄位是一級欄位,沒有巢狀關係
POST device_search_20200716/_update_by_query?conflicts=proceed
{
"script": {
"source": "ctx._source['labels']='2';",
"lang": "painless"
},
"query": {
"bool": {
"must": [
{
"exists": {
"field": "deviceInfo.deviceType"
}
}
],
"must_not": [
{
"term": {
"labels.hasSoftType": {
"value": "1"
}
}
}
]
}
}
}
# # 官網文件上的內容以及需要主義的點
待整理
相關文章
- Elasticsearch——query stringElasticsearch
- 像使用 Laravel Query 一樣的搜尋 ElasticsearchLaravelElasticsearch
- Elasticsearch bool query小結Elasticsearch
- Elasticsearch Query DSL查詢入門Elasticsearch
- 實踐001-elasticsearch的index、create、updateElasticsearchIndex
- ES 筆記四十四:Update By Query & Reindex API筆記IndexAPI
- elasticsearch Request Body 與 Query DSL詳解Elasticsearch
- Elasticsearch複合查詢—constant score queryElasticsearch
- Elasticsearch 之 Filter 與 Query 有啥不同?ElasticsearchFilter
- drools中query的使用
- AT_abc287_g [ABC287G] Balance Update Query 題解
- Elasticsearch Query DSL建立滾動索引(生命週期策略)Elasticsearch索引
- ElasticSearch 實現分詞全文檢索 - delete-by-queryElasticsearch分詞delete
- GreatSQL執行Update失敗案例分析SQL
- OB_MYSQL UPDATE 最佳化案例MySql
- AT_abc287_g [ABC287G] Balance Update Query 題解2
- ElasticSearch 中 match、match_phrase、query_string 和 term 的區別Elasticsearch
- elasticsearch的使用Elasticsearch
- Elasticsearch 在業界的大量應用案例Elasticsearch
- ElasticSearch7.3學習(二十一)----Filter與Query對比、使用explain關鍵字分析語法ElasticsearchFilterAI
- Oracle中的for update 和 for update nowaitOracleAI
- Spring Data JPA 在 @Query 中使用投影的方法Spring
- ElasticSearch7.3學習(二十五)----Doc value、query phase、fetch phase解析Elasticsearch
- on duplicate key update簡單使用
- update-alternatives 使用詳解
- pt-query-digest使用詳解
- Elasticsearch 技術分析(九):Elasticsearch的使用和原理總結Elasticsearch
- 正確的使用pod install 和 pod update - CocoaPods
- MySQL 關於 INSERT INTO...ON DUPLICATE KEY UPDATE 的使用MySql
- Elasticsearch使用系列-Docker搭建Elasticsearch叢集ElasticsearchDocker
- INDEX REBUILD和INDEX REORGANIZE和UPDATE STATISTICS是否涉及Sch-M的案例分析IndexRebuild
- MySQL更新資料,如何使用updateMySql
- RabbitMQ和Elasticsearch的使用筆記MQElasticsearch筆記
- ElasticSearch Java API使用ElasticsearchJavaAPI
- Laravel 下 Elasticsearch 使用LaravelElasticsearch
- Django中使用ElasticSearchDjangoElasticsearch
- Elasticsearch使用系列-.NET6對接ElasticsearchElasticsearch
- ElasticSearch 億級資料檢索案例實戰Elasticsearch