- 本系列筆記結(jié)合HTTP請(qǐng)求(使用postman調(diào)用,源文件見GitHub)和ElasticsearchRestTemplate進(jìn)行調(diào)用學(xué)習(xí)
- ElasticsearchRestTemplate封裝了RestHighLevelClient,有些場(chǎng)景還得用RestHighLevelClient來操作
- 版本說明:使用的SpringBoot-2.3.5,對(duì)應(yīng)的ElasticSearch-7.6.2;所以還是可以用RestHighLevelClient
- ElasticSearch-7.15后就棄用了RestHighLevelClient,可見官網(wǎng)文檔,之后的版本可以開啟客戶端兼容來維持正常使用
1. bulk:
可以批量進(jìn)行增刪改,并且某一個(gè)操作失敗,不會(huì)影響其他文檔的操作,會(huì)在返回結(jié)果中告訴你失敗的詳細(xì)的原因
1.1. bulk語法:
- POST /_bulk或POST /<index>/_bulk
- 請(qǐng)求體要使用NDJSON(新行分隔的JSON)結(jié)構(gòu):JSON串只能放一行,相鄰的JOSN串要換行
- 現(xiàn)有行為actions ,再有請(qǐng)求體
1.2. bulk行為-增刪改:
- create 如果文檔不存在就創(chuàng)建,但如果文檔存在就返回錯(cuò)誤
- index 如果文檔不存在就創(chuàng)建,如果文檔存在就更新
- update 更新一個(gè)文檔,如果文檔不存在就返回錯(cuò)誤
- delete 刪除一個(gè)文檔,如果要?jiǎng)h除的文檔id不存在,就返回錯(cuò)誤
2. bulk-index批量插入:
【HTTP請(qǐng)求】:往user_term索引批量插入數(shù)據(jù),指定文檔id分別是1和2
·
【說明】:二者的結(jié)果是一樣的,_index為索引名,_id為文檔id,如果索引不存在會(huì)新建索引
·
【API請(qǐng)求】:save或bulkIndex,實(shí)體類使用@id,userId的值就是文檔id
·
3. bulk-update批量修改:
批量更新update行為時(shí),有以下幾種模式
- doc :更新部分文檔
- upsert:于script一起使用,文檔存在時(shí)根據(jù)script腳本更新_source,不存在時(shí)使用upsert內(nèi)容進(jìn)行添加文檔
- doc_as_upsert:與upsert類似,文檔存在時(shí)更新,不存在時(shí)將doc的內(nèi)容作為_source添加文檔
- script:按腳本進(jìn)行更新
【HTTP請(qǐng)求】:
·
【栗子說明】:
- 將文檔id=1的文檔,進(jìn)行多字段局部更新
- 將文檔id=2的文檔,進(jìn)行單字段局部更新
- 文檔id=3的文檔不存在,更新失敗404
- 將文檔id=4的文檔,進(jìn)行單字段局部更新,由于文檔不存在,{“address”: “China HZ”}作為_source插入新文檔
- 將文檔id=5的文檔,根據(jù)script腳本進(jìn)行單字段局部更新,由于文檔不存在,根據(jù)upsert內(nèi)容進(jìn)行插入新文檔
·
【題外】:失敗原因會(huì)在response顯示,也可以使用?filter_path=items.*.error只顯示失敗內(nèi)容·
【API請(qǐng)求】:bulkUpdate - 其中一個(gè)失敗不影響其他操作,但會(huì)拋異常
·
4. bulk-delete批量刪除:
批量刪除文檔
·
【HTTP請(qǐng)求】:
·
【API請(qǐng)求】:可以使用terms進(jìn)行條件刪除
·
5. _update_by_query條件更新:
根據(jù)條件進(jìn)行更新文檔,而非通過文檔id進(jìn)行更新,條件可以使用term、match、bool等匹配方式
【栗子】:匹配修改name包含Tom的文檔,批量修改文檔地址為BJ
·
【HTTP請(qǐng)求】:
·
【API】:updateByQuery
·
6. _delete_by_query條件刪除:
根據(jù)條件進(jìn)行刪除文檔,而非通過文檔id進(jìn)行刪除,條件可以使用term、match、bool等匹配方式
【栗子】:匹配刪除name包含Tom的文檔
·
【HTTP請(qǐng)求】:
·
【API請(qǐng)求】:
·
7. _mget多文檔查詢:
根據(jù)文檔id,從一個(gè)索引或者多個(gè)索引獲取多個(gè)文檔
- 格式:GET /_mget 或 GET /<index>/_mget
【HTTP請(qǐng)求】:
·
【說明】:
- 可以對(duì)結(jié)果_source中的字段進(jìn)行指定顯示,比如_source只顯示include的字段
- 并不是只有mget可以這樣,其它的查詢也可以這么指定顯示
·
【ids查詢】:對(duì)于同一個(gè)索引根據(jù)id進(jìn)行查詢多個(gè)文檔,可以直接使用ids查詢
·
【API請(qǐng)求】:multiGet:同一個(gè)索引的mget
·
8. 其它查詢:
一些常見的查詢,比如范圍查詢r(jià)ange、分頁查詢等
8.1. range范圍查詢:
返回匹配范圍區(qū)間的文檔數(shù)據(jù)
- gt - 大于;gte - 大于等于;lt - 小于;lte - 小于等于;format - 日期格式化
【HTTP請(qǐng)求】:插入四條文檔,查詢 2<userId<=4的文檔數(shù)據(jù)
·
【API請(qǐng)求】:rangeQuery構(gòu)建QueryBuilders
·
8.2. fuzzy模糊/相似查詢:
基于term的相似模糊查詢,返回與搜索詞相似匹配的文檔,主要有如下4個(gè)參數(shù)
- value:搜索詞
- fuzziness:允許容錯(cuò)的詞數(shù)/偏移量,默認(rèn)是AUTO
- prefix_length:不能被 “模糊化” 的初始字符數(shù),前n個(gè)字符與搜索詞相同;默認(rèn)0
- max_expansions: 默認(rèn)50,該值不宜設(shè)置太大,具體含義不太清楚
【數(shù)據(jù)準(zhǔn)備】:插入三條文檔,name分別是李嘉圖、李嘉欣、王嘉欣
·
【HTTP請(qǐng)求】:搜索李嘉欣
·
【說明】:
- fuzziness為0時(shí),說明不允許容錯(cuò),那么只能搜索到李嘉欣的文檔
- fuzziness為0時(shí),可以容錯(cuò)一個(gè)詞,那么可以搜索到李嘉欣、李嘉圖的文檔;如果附加prefix_length為3,那么只能搜索到李嘉欣
- prefix_length為0時(shí),3個(gè)文檔都可以搜索到
·
【API請(qǐng)求】:fuzzyQuery構(gòu)建QueryBuilders
·
【match.fuzzy】:match中也支持fuzzy模糊查詢,如下:
·
【API】:
·
8.3. exists文檔是否存在查詢:
如果exists匹配的字段不為null或[],就能搜索出文檔
【數(shù)據(jù)準(zhǔn)備】:插入4條文檔,programming_languages分別是[]、[“”]、null、[“java”]
·
【HTTP請(qǐng)求】:
·
【API請(qǐng)求】:existsQuery構(gòu)建QueryBuilders
·
8.4. from/size分頁查詢:
根據(jù)from和size進(jìn)行數(shù)據(jù)結(jié)果分頁;其中from= (頁碼-1) * size
【數(shù)據(jù)準(zhǔn)備】:插入4條文檔,userId為1,2,3,4
·
【HTTP請(qǐng)求】:查詢第2頁數(shù)據(jù),每頁2條,按userId降序
·
【說明】:
- sort、from、size和query同一層級(jí),會(huì)先排序再分頁
·
·【API請(qǐng)求】:withPageable
·
【說明】:
- 這里的page和HTTP請(qǐng)求的from不一樣,這里的是頁碼,是從第0頁開始的,也就是第一頁其實(shí)page=0
8.5. wildcard通配符查詢:
支持*通配符查詢,如下匹配name為李 開頭的文檔
·
【HTTP請(qǐng)求】:
·
【API請(qǐng)求】:wildcardQuery構(gòu)建QueryBuilders
·文章來源:http://www.zghlxwxcb.cn/news/detail-403104.html
8.6. 聚合查詢:
另起文章,鏈接后續(xù)再補(bǔ)文章來源地址http://www.zghlxwxcb.cn/news/detail-403104.html
到了這里,關(guān)于初識(shí)ElasticSearch(5) -批量操作之bulk | 條件查詢 | 其它查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!