ELK 設置定時清理腳本清理索引
998
2025-03-31
elasticsearch官網:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/getting-started-search.html
1.ES中的檢索方式
在ElasticSearch中支持兩種檢索方式
通過使用REST request URL 發送檢索參數(uri+檢索參數)
通過使用 REST request body 來發送檢索參數 (uri+請求體)
第一種方式
GET bank/_search # 檢索bank下的所有信息,包括 type 和 docs
GET bank/_search?q=*&sort=account_number:asc
響應結果信息
第二種方式
通過使用 REST request body 來反射檢索參數 (uri+請求體)
GET bank/_search
{ "query":{ "match_all":{} }, "sort":[ { "account_number":"desc" } ] }
1
2
3
4
5
6
7
8
9
10
2.Query DSL
2.1 基本語法
ElasticSearch提供了一個可以執行的JSON風格的DSL(domain-specific language 領域特定語言),這個被稱為Query DSL,該查詢語言非常全面,并且剛開始的時候感覺有點復雜,真正學好它的方法就是從一些基礎案例開始的。
完整的語法結構
{ QUERY_NAME:{ ARGUMENT:VALUE, ARGUMENT:VALUE,... } }
1
2
3
4
5
6
如果是針對某個字段,那么它的結構為
{ QUERY_NAME:{ FIELD_NAME:{ ARGUMENT:VALUE, ARGUMENT:VALUE,... } } }
1
2
3
4
5
6
7
8
2.2 match
上面我們用到來的match_all是匹配所有的數據,而我們現在要講的match是條件匹配
如果對應的字段是基本類型(非字符串類型),則是精確匹配。
GET bank/_search { "query":{ "match":{ "account_number":20 } } }
1
2
3
4
5
6
7
8
match返回的是 account_number:20的記錄
如果對應的字段是字符串類型,則是全文檢索
GET bank/_search { "query":{ "match":{ "address":"mill" } } }
1
2
3
4
5
6
7
8
match返回的就是address中包含mill字符串的記錄
2.3 match_phrase
將需要匹配的值當成一個整體單詞(不分詞)進行檢索,短語匹配
GET bank/_search { "query":{ "match_phrase":{ "address":"mill road" } } }
1
2
3
4
5
6
7
8
查詢出address中包含 mill road的所有記錄,并給出相關性得分
2.4 multi_match[多字段匹配]
GET bank/_search { "query":{ "multi_match":{ "query":"mill road", "fields":["address","state"] } } }
1
2
3
4
5
6
7
8
9
查詢出state或者address中包含 mill road的記錄
2.5 bool[復合查詢]
布爾查詢又叫組合查詢,bool用來實現復合查詢,
bool把各種其它查詢通過 must(與)、must_not(非)、should(或)的方式進行組合
復合語句可以合并任何其他查詢語句,包括復合語句也可以合并,了解這一點很重要,這意味著,復合語句之間可以相互嵌套,可以表達非常復雜的邏輯。
GET /bank/_search { "query": { "bool": { "must": [ { "match": { "age": "40" } } ], "must_not": [ { "match": { "state": "ID" } } ] } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
2.6 filter[結果過濾]
并不是所有的查詢都需要產生分數,特別是那些僅用于"filtering"的文檔,為了不計算分數,ElasticSearch會自動檢查場景并且優化查詢的執行。
GET /bank/_search { "query": { "bool": { "must": { "match_all": {} }, "filter": { "range": { "balance": { "gte": 20000, "lte": 30000 } } } } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2.7 term
和match一樣,匹配某個屬性的值,全文檢索字段用match,其他非text字段匹配用term
GET bank/_search { "query":{ "term":{ "account_number":20 } } }
1
2
3
4
5
6
7
8
好了索引查詢這塊就介紹到這兒了
Elasticsearch 實時流計算服務 CS
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。