Elasticsearch查詢Range Query語法示例
Range Query
Range查詢可以查詢一個(gè)范圍內(nèi)的文檔。它可以用來查詢數(shù)值型字段、日期型字段、字符串型字段等等。
我們可以使用range查詢來查詢符合一定范圍內(nèi)的數(shù)據(jù),如查詢某個(gè)價(jià)格區(qū)間、某個(gè)時(shí)間段內(nèi)的數(shù)據(jù)等等。
查詢語法示例
GET /{index}/_search { "query": { "range": { "{field}": { "gte": "{lowerBound}", "lte": "{upperBound}", "gt": "{lowerBound}", "lt": "{upperBound}", "boost": {boostValue}, "format": "{dateFormat}", "time_zone": "{timezone}" } } } }
其中,{field}
表示要查詢的字段,{lowerBound}
和{upperBound}
表示要查詢的范圍,gte
表示大于等于,lte
表示小于等于,gt
表示大于,lt
表示小于。
boost
是用來提高查詢的重要性,可以設(shè)置一個(gè)浮點(diǎn)數(shù)。
format
是用來設(shè)置日期格式,如果要查詢?nèi)掌陬愋偷淖侄危梢栽O(shè)置這個(gè)參數(shù)。
time_zone
是用來設(shè)置時(shí)區(qū)。
查詢數(shù)字范圍
GET /products/_search { "query": { "range": { "price": { "gte": 100, "lte": 200 } } } }
查詢?nèi)掌诜秶?/h3>
GET /logs/_search
{
"query": {
"range": {
"timestamp": {
"gte": "2022-01-01",
"lte": "2022-01-31",
"format": "yyyy-MM-dd"
}
}
}
}
GET /logs/_search { "query": { "range": { "timestamp": { "gte": "2022-01-01", "lte": "2022-01-31", "format": "yyyy-MM-dd" } } } }
查詢字符串范圍
針對(duì)字符串類型的字段,使用range
查詢需要注意以下幾點(diǎn):
- 字符串類型的字段,必須使用
keyword
類型,才能使用range
查詢。 - 在查詢字符串的區(qū)間時(shí),需要使用字符串類型的區(qū)間邊界值。
下面是一個(gè)使用range
查詢查詢字符串區(qū)間的示例:
查詢age
字段值在"20"
到"30"
之間(包括邊界值)的文檔:
GET /user_info/_search { "query": { "range": { "age": { "gte": "20", "lte": "30" } } } }
注意
即使字段類型為字符串,如果該字段的值可以按照一定的順序進(jìn)行比較,那么就可以進(jìn)行范圍查詢。比如日期、數(shù)字、版本號(hào)等等。但是對(duì)于不可比較的字符串值,如名稱、描述等等,就無法進(jìn)行范圍查詢了。
JavaAPI查詢示例
SearchRequest searchRequest = new SearchRequest("user_info"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age") .gte("20") .lte("30"); searchSourceBuilder.query(rangeQueryBuilder); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
總結(jié)
- Range查詢可以用于數(shù)值型、日期型和字符串型的字段。
- 對(duì)于字符串型的字段,其值需要具備可排序的特性,以便進(jìn)行范圍查詢。
- 如果字符串的格式無法排序,需要將其轉(zhuǎn)換為可以排序的格式,如時(shí)間戳。
- 范圍查詢可以指定包含邊界或者不包含邊界,以及包含哪些邊界。
- 范圍查詢可以使用GTE、GT、LTE和LT參數(shù)來指定范圍的邊界。
- 范圍查詢可以使用日期時(shí)間格式或者UNIX時(shí)間戳來查詢?nèi)掌谛妥侄巍?/li>
以上就是Elasticsearch查詢Range Query語法示例的詳細(xì)內(nèi)容,更多關(guān)于Elasticsearch查詢Range Query的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot利用限速器RateLimiter實(shí)現(xiàn)單機(jī)限流的示例代碼
本文主要介紹了SpringBoot利用限速器RateLimiter實(shí)現(xiàn)單機(jī)限流的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Java如何利用Mybatis進(jìn)行數(shù)據(jù)權(quán)限控制詳解
這篇文章主要介紹了Java如何利用Mybatis進(jìn)行數(shù)據(jù)權(quán)限控制詳解,數(shù)據(jù)權(quán)限控制最終的效果是會(huì)要求在同一個(gè)數(shù)據(jù)請(qǐng)求方法中,根據(jù)不同的權(quán)限返回不同的數(shù)據(jù)集,而且無需并且不能由研發(fā)編碼控制。,需要的朋友可以參考下2019-06-06SpringBoot實(shí)現(xiàn)多個(gè)子域共享cookie的示例
本文主要介紹了SpringBoot實(shí)現(xiàn)多個(gè)子域共享cookie的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Java設(shè)計(jì)模式之備忘錄模式實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù)
本文介紹Java設(shè)計(jì)模式之備忘錄模式,該模式可以實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù)。通過詳細(xì)講解備忘錄模式的原理、實(shí)現(xiàn)方法和應(yīng)用場景,幫助讀者深入理解該設(shè)計(jì)模式,并提供示例代碼和技巧,便于讀者實(shí)際應(yīng)用2023-04-04springboot項(xiàng)目部署在linux上運(yùn)行的兩種方式小結(jié)
這篇文章主要介紹了springboot項(xiàng)目部署在linux上運(yùn)行的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07