01.elasticsearch请求使用的基本语法
文章目錄
- 簡介
- 1. 多個index的匹配方式
- 2. 在index name中使用日期計算模板
- 1. 對應的索引的模式是
- 2. 一個樣例模板
- 3. 表達式樣例
- 3. api常見的參數
- 1. 美化展示pretty result
- 2. 便于閱讀的格式 human readable output
- 3. 日記計算語法 date math
- 4. 返回結果過濾器 response filter
- 5. setting顯示折疊化 setting flatten
- 6. uri傳參
- 7. boolean如何表示
- 8. 數字如何表示
- 9. 時間單位 time unit
- 10. 存儲單位,byte size unit
- 11. 數字單位制
- 12. 距離單位distance unit
- 13. 模糊匹配的規則
- 14. 開啟堆棧信息
- 15. 使用query-string傳遞request body
- 16. 需要的content-type
- 4. 基于url訪問index的限制(index name只能在url中傳遞)
簡介
這篇文章主要介紹es的各個api使用的時候的一些基本的參數或者語法,主要包括3個方面
1. 多個index的匹配方式
index的匹配規則分為兩種,一種是完全匹配,一種是模糊匹配()
完全匹配就是提供索引的全稱,比如 test01,test02等等
模糊匹配就是正常的字符串和通配符*,比如 test1,test2,test*,*test, *test*
模糊匹配和可以配合非匹配模式使用,比如 test*,-test01,表示使用test開頭的索引,但是要排除test01索引
樣例
GET test*,-test01/_search返回的只有test索引相關的數據, test01中的數據不會被召回
還有幾個相關的參數
ignore_unavailable:是否忽略不存在(或者是close)的索引,值可以是true,false
allow_no_indices: 是否允許通配符匹配沒有匹配到索引,值可以是true,false
expand_wildcards: 允許通配符匹配什么類型的的索引,值可以是close,open
這幾個參數的默認值在不同索引中可能不一樣
2. 在index name中使用日期計算模板
在查詢中指定index的name的時候可以使用日期計算模板來動態的指定索引的名稱。
1. 對應的索引的模式是
<static_name{date_math_expr{date_format|time_zone}}>static_name: 索引name中的固定字符串部分
date_math_expr: date的計算模板
date_format: 日期的格式
time_zone: 時區,默認為utc時區
2. 一個樣例模板
# GET /<logstash-{now/d}>/_search GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search {"query" : {"match": {"test": "data"}} }字符串都要進行轉義
< %3C> %3E/ %2F{ %7B} %7D| %7C+ %2B: %3A, %2C3. 表達式樣例
<logstash-{now/d}> logstash-2024.03.22<logstash-{now/M}> logstash-2024.03.01<logstash-{now/M{yyyy.MM}}> logstash-2024.03<logstash-{now/M-1M{yyyy.MM}}> logstash-2024.02<logstash-{now/d{yyyy.MM.dd|+12:00}}> logstash-2024.03.23關于日期計算表達式的運算規則,在下一個小節中會具體的講述
3. api常見的參數
這里講述的是一些常見的請求參數,大部分是輔助性的參數
1. 美化展示pretty result
?pretty=true ?format=yaml GET test01/_search?format=yaml 返回 took: 0 timed_out: false _shards:total: 1successful: 1skipped: 0failed: 0 hits:total:value: 1relation: "eq"max_score: 1.0hits:- _index: "test01"_type: "_doc"_id: "CRCXd3UB0LiXOVZQCY2j"_score: 1.0_source:name: "hahah"2. 便于閱讀的格式 human readable output
?human=false ?human=true3. 日記計算語法 date math
date math的格式是這樣的
1.開頭,必須以 now或者 日期字符串||開頭
2. 進行時間的加減,取某一天等計算(可以沒有這一段)
+1h: Add one hour
-1d: Subtract one day
/d: Round down to the nearest day, 最近的一天
舉例,假如當前是now是 2001-01-01 12:00:00
now+1h : 2001-01-01 13:00:00
now-1h: 2001-01-01 11:00:00
now-1h/d: 2001-01-01 00:00:00
2001.02.01||+1M/d: 2001-03-01 00:00:00
4. 返回結果過濾器 response filter
主要使用了路徑過濾
GET /_search?q=elasticsearch&filter_path=took,hits.hits._id,hits.hits._score GET /_cluster/state?filter_path=metadata.indices.*.stat*使用兩個*可以匹配任何多個路徑 GET /_cluster/state?filter_path=routing_table.indices.**.state5. setting顯示折疊化 setting flatten
GET twitter/_settings?flat_settings=true6. uri傳參
這個地方是強調es的rest api的傳參方式實際上是和http的傳參方式是一致的
7. boolean如何表示
使用字符串的 "true" , "false"表示 true,false
8. 數字如何表示
直接使用字符串即可,不用再加雙引號
9. 時間單位 time unit
d: 天
h: 小時
m: 分鐘
s: 秒
ms: 毫秒
micros: 微秒
nanos: 納秒
10. 存儲單位,byte size unit
b,kb,mb,gb,tb, pb
11. 數字單位制
k
m
g
t
p
12. 距離單位distance unit
13. 模糊匹配的規則
fuzziness查詢的時候指定單個term的編輯距離,一般是字符級別的編輯距離,默認情況下是auto,
auto的含義是
14. 開啟堆棧信息
POST /twitter/_search?size=surprise_me&error_trace=true15. 使用query-string傳遞request body
16. 需要的content-type
大部分情況下我們都要增加一個 Content-Typeheader來標示我們傳輸的內容的格式
4. 基于url訪問index的限制(index name只能在url中傳遞)
有些時候我們會有一個前置的代理做權限控制,基于訪問的uri中攜帶的index來做權限控制,但是有些人不在uri中使用index,或者在請求的body中重寫請求的index,這樣就繞過了權限校驗
我們可以通過在es中設置禁止在body中使用index name來避免這種情況
這個配置只能在yml文件中配置
總結
以上是生活随笔為你收集整理的01.elasticsearch请求使用的基本语法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 05.elasticsearch-ind
- 下一篇: 02.elasticsearch_rea