主要介紹搜尋的請求和回應的參數
此篇的指令以 kibana 操作為主,個人覺得比較方便好用且易上手
利用elastic提供的sample data set匯入至我們的elastic cloud
有些許資料就可以很快速的看出我們執行指令的效果,
有不一樣的data也可以嘗試更多指令,比較指令間的差異
下載資料
sample data set: account.json
可以按右鍵另存新檔,即會挑出下載視窗
每一筆資料為使用者帳戶的資訊,例如:
{
"account_number": 0,
"balance": 16623,
"firstname": "Bradshaw",
"lastname": "Mckenzie",
"age": 29,
"gender": "F",
"address": "244 Columbus Place",
"employer": "Euron",
"email": "bradshawmckenzie@euron.com",
"city": "Hobucken",
"state": "CO"
}
批次匯入資料
到剛剛下載的檔案(account.json)的目錄下,執行指令
Request (cURL)
curl -u {AUTH} "{endpoint}/bank/_bulk?pretty&refresh" -XPOST -H "Content-Type: application/json" --data-binary "@accounts.json"
如不知道
{AUTH}
和{endpoint}
要替換什麼值,可參考 Elastic Stack第五重
[注意]"{endpoint}/bank/_bulk?pretty&refresh"
這邊要用 "(雙引號) 包起來,不然會報錯
Response(因為過長,所以只截片段圖)
驗證結果
可使用 上一重 教的 取得指定index內的所有documents 來驗證
發現 bank
index被建立了,而且有資料了
查看所有indices狀況
indices為index複數
Request (kibana)
GET /_cat/indices?v
Response
可以發現有 bank
這個index,以及 docs.count
(代表documents數量) 有1000筆
Sort(排序)
搜尋 bank
index所有documents,並用 account_number
排序
Request (kibana)
GET /bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"account_number": "asc"
}
]
}
Response
Response Parameters (回應參數)
針對 _search
的 Response 做更詳細的介紹
match_all
不適用於此)Page Through (分頁)
每一個搜尋要求(search request) 都是獨立的,也就是requests間沒有狀態關係,
所以如果想要翻頁(取得其他筆資料),可用
from: 從第幾筆開始 (預設為0)
size: 取幾筆 (預設為10)
範例:取bank index第二頁的documents,即取得第10筆到第19筆
Request (kibana)
GET /bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"account_number": "asc"
}
],
"from": 10,
"size": 10
}
Response
搜尋特定欄位是否包含某字串
以搜尋 address
(地址) 是否包含 mill
或 lane
Request (kibana)
GET /bank/_search
{
"query": {
"match": {
"address": "mill lane"
}
}
}
Response
此時可以在和上面詳細介紹的參數做比對,
[紅框]max_score
是指匹配的最高分,第一筆即是一樣的分數,代表第一筆是最匹配的,
而在不指定排序情況下,預設的排序即是 高分->低分
[橘黃框]
第一筆的 address
不僅有 mill
也有 lane
,而第二筆只有 mill
,
也因此,第一筆會比第二筆還高分
[注意]
- 此request是去找有
mill
或lane
- 會發現其實request的搜尋字串都是小寫,為什麼還可以匹配到,因為es在不設定 analyzer 情況下,預設是使用
standard
analyzer,而此analyzer中間有一步驟是會把字詞都變小寫(lowercase),後續會有篇章更詳細介紹 analyzer
那如果現在想要真的搜尋 "mill lane"
這個字串呢?
使用 match_phrase
Request (kibana)
GET /bank/_search
{
"query": {
"match_phrase": {
"address": "mill lane"
}
}
}
Response
小小新手,如有理解錯誤或寫錯再請不吝提醒或糾正
Indexing documents in bulk
Start searching