爲了更好的使用和理解ES,沒有點樣例數據仍是很差模擬的。這裏提供了一份官網上的數據,accounts.json。若是須要的話,也能夠去這個網址玩玩,它能夠幫助你自定義寫隨機的JSON數據。json
一、導入數據網絡
打開你的postman,輸入對應的REST API,http://127.0.0.1:9200/bank/account/_bulk?pretty
選擇post; body->binary; 選擇文件,選中你下載好的account.json文件:
app
注意:dom
1 127.0.0.1:9200是ES得訪問地址和端口curl
2 bank是索引的名稱ide
3 account是類型的名稱post
4 索引和類型的名稱在文件中若是有定義,能夠省略;若是沒有則必需要指定學習
5 _bulk是rest得命令,能夠批量執行多個操做ui
6 pretty是將返回的信息以可讀的JSON形式返回。(不過postman自帶了pretty的功能)搜索引擎
send以後,能夠很快看到結果:
accounts.json數據導入,報錯:
一、parse_exception - request body is required
【確認Body->binary導入進了json文件】
二、"Content-Type header [application/x-www-form-urlencoded] is not supported
【須要在headers中添加 Content-Type application/json】
二、查詢: http://127.0.0.1:9200/_cat/indices?v
插入1000條數據成功
三、保存對應的REST API到postman
點擊save:
在彈出的save窗口中,給對應的request起一個合適的名字,好比這裏createBankIndex,並將其保存到對應的collection中(在這裏,我已提早建立了一個ElasticSearch的collection,專門用於保存和ES相對應的REST API的操做)。
ES提供了兩種搜索的方式:請求參數方式 和 請求體方式。
一、請求參數方式
curl 'localhost:9200/bank/_search?q=*&pretty'
其中bank是查詢的索引名稱,q後面跟着搜索的條件:q=*表示查詢全部的內容
二、請求體方式(推薦這種方式)
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
請求JSON體 {"query": { "match_all": {} }}
這種方式特別適合在postman裏面用,由於postman裏面可使用配合使用各類變量,並且編輯起來更方便:
返回的內容大體能夠以下講解:
took:是查詢花費的時間,毫秒單位
time_out:標識查詢是否超時
_shards:描述了查詢分片的信息,查詢了多少個分片、成功的分片數量、失敗的分片數量等
hits:搜索的結果,total是所有的知足的文檔數目,hits是返回的實際數目(默認是10)
_score是文檔的分數信息,與排名相關度有關,參考各大搜索引擎的搜索結果,就容易理解。
ES支持一種JSON格式的查詢,叫作DSL,domain specific language。這門語言剛開始比較難理解,所以經過幾個簡單的例子開始:
下面的命令,能夠搜索所有的文檔:
{
"query": { "match_all": {} }
}
query定義了查詢,match_all聲明瞭查詢的類型。還有其餘的參數能夠控制返回的結果:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_all": {} },
"size": 1
}'
(記住,仍是用postman來作客戶端,絕逼比curl好用)
上面的命令 返回了全部文檔數據中的第一條文檔。若是size不指定,那麼默認返回10條。
下面的命令請求了第10-20的文檔。
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_all": {} },
"from": 10,
"size": 10
}'
下面的命令指定了文檔返回的排序方式:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_all": {} },
"sort": { "balance": { "order": "desc" } }
}'
同 "sort": { "balance": "desc" }
上面瞭解了基本的搜索語句,下面就開始深刻一些經常使用的DSL了。
以前的返回數據都是返回文檔的全部內容,這種對於網絡的開銷確定是有影響的,下面的例子就指定了返回特定的字段(account_number和blance):
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]
}'
再回到query,以前的查詢都是查詢全部的文檔,並不能稱之爲搜索引擎。下面就經過match方式查詢特定字段的特定內容,好比查詢餘額爲20的帳戶信息:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "account_number": 20 } }
}'
查詢地址爲mill或者lane的信息:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "address": "mill lane" } }
}'
能夠結合以前的Head客戶端來使用。
以前說過score字段指定了文檔的分數,使用查詢會計算文檔的分數,最後經過分數肯定哪些文檔更相關,返回哪些文檔。
有的時候咱們可能對分數不感興趣,就可使用filter進行過濾,它不會去計算分值,所以效率也就更高一些。
filter過濾能夠嵌套在bool查詢內部使用,好比想要查詢在2000-3000範圍內的全部文檔,能夠執行下面的命令:curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must": { "match_all": {} },
"filter": {
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}}}}}
}
ES除了上面介紹過的範圍查詢range、match_all、match、bool、filter還有不少其餘的查詢方式,這裏就先不一一說明了。