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"
}
}
}
]
}
}
}
# # 官網文件上的內容以及需要主義的點
待整理
相關文章
- 像使用 Laravel Query 一樣的搜尋 ElasticsearchLaravelElasticsearch
- Elasticsearch——query stringElasticsearch
- Elasticsearch bool query小結Elasticsearch
- Elasticsearch Query DSL查詢入門Elasticsearch
- Elasticsearch 之 Filter 與 Query 有啥不同?ElasticsearchFilter
- elasticsearch Request Body 與 Query DSL詳解Elasticsearch
- 實踐001-elasticsearch的index、create、updateElasticsearchIndex
- ES 筆記四十四:Update By Query & Reindex API筆記IndexAPI
- Elasticsearch複合查詢—constant score queryElasticsearch
- elasticsearch的使用Elasticsearch
- ElasticSearch 實現分詞全文檢索 - delete-by-queryElasticsearch分詞delete
- Elasticsearch Query DSL建立滾動索引(生命週期策略)Elasticsearch索引
- OB_MYSQL UPDATE 最佳化案例MySql
- GreatSQL執行Update失敗案例分析SQL
- AT_abc287_g [ABC287G] Balance Update Query 題解
- Elasticsearch 在業界的大量應用案例Elasticsearch
- AT_abc287_g [ABC287G] Balance Update Query 題解2
- ElasticSearch 中 match、match_phrase、query_string 和 term 的區別Elasticsearch
- 使用elasticsearch,Elasticsearch Scripts disabledElasticsearch
- Elasticsearch的Bulk API使用ElasticsearchAPI
- ElasticSearch(六) Elasticsearch在Thinkphp5.0中的使用ElasticsearchPHP
- 五、Elasticsearch快速入門案例(1)-CRUDElasticsearch
- ElasticSearch7.3學習(二十一)----Filter與Query對比、使用explain關鍵字分析語法ElasticsearchFilterAI
- MyBatis Batch Update Exception使用foreach批量update出錯MyBatisException
- 使用select監視update的操作
- Elasticsearch的PHP的API使用(一)ElasticsearchPHPAPI
- Elasticsearch使用系列-Docker搭建Elasticsearch叢集ElasticsearchDocker
- Elasticsearch 技術分析(九):Elasticsearch的使用和原理總結Elasticsearch
- 關於使用多表做update的語法
- ElasticSearch 億級資料檢索案例實戰Elasticsearch
- Elasticsearch學習系列三(搜尋案例實戰)Elasticsearch
- RabbitMQ和Elasticsearch的使用筆記MQElasticsearch筆記
- Elasticsearch使用系列-.NET6對接ElasticsearchElasticsearch
- BW Query替換路徑變數的使用變數
- ElasticSearch7.3學習(二十五)----Doc value、query phase、fetch phase解析Elasticsearch
- ElasticSearch Java API使用ElasticsearchJavaAPI
- Laravel 下 Elasticsearch 使用LaravelElasticsearch
- Django中使用ElasticSearchDjangoElasticsearch