Elasticsearch 搜索文檔

Loading the Sample Dataset加載樣例數(shù)據(jù)

首先下載json數(shù)據(jù)
https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json
下載下來(lái)保存為json文件次企,然后在json文件目錄上用curl上傳酷愧。

curl -H "Content-Type: application/json" -XPOST "user:password@localhost:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"

The Search API

Searches方法有兩種方式痹仙,一種是使用REST request URL狈醉,另外一種是使用REST request body幻枉,使用REST request body可以用更容易讀懂的JSON格式定義搜索规哲。

REST request URL方式搜索:
GET /bank/_search?q=*&sort=account_number:asc&pretty
讓我們來(lái)解析下參數(shù):

_search代表是search操作询兴,然后q=*參數(shù)代表ElasticSearch將匹配這個(gè)index中的所以document乃沙,然后參數(shù)sort=account_number:asc代表使用account_number這個(gè)field去排序,使用ascending(向上的)排序方式诗舰。pretty表示返回pretty-printed的JSON警儒。

接下來(lái)解析響應(yīng)的文本。
  • took -代表所使用的的時(shí)間眶根。
  • time_out -告訴我們有沒(méi)有超時(shí)
  • _shards -告訴我們多少個(gè)片區(qū)被搜索過(guò)蜀铲,多少個(gè)片區(qū)成功搜索過(guò)
  • hits -搜索結(jié)果
  • hits.total -多少個(gè)document匹配我們的搜索范圍
  • hits.hits -實(shí)際搜索結(jié)果的數(shù)組。默認(rèn)是10個(gè)documents属百。
  • hits.sort - 結(jié)果排序的索引號(hào)记劝。
  • hits._score跟max_sorce -暫時(shí)忽略這個(gè)東東。

使用REST request body請(qǐng)求示例:

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ]
}

這里跟在URL中請(qǐng)求不一樣族扰,我們提供了一個(gè)JSON格式的請(qǐng)求查詢(xún)體給_search API厌丑。在下一節(jié)我們將討論這個(gè)Json 查詢(xún)。

一旦查詢(xún)完成渔呵,ElasticSearch將不維護(hù)任何游標(biāo)(或分頁(yè))這種蹄衷。跟SQL平臺(tái)的不一樣。

Introducing the Query Language

ElasticSearch提供了一種JSON風(fēng)格的特定域語(yǔ)言DSL厘肮,可以用來(lái)執(zhí)行查詢(xún)愧口。
回顧上面的例子,我們執(zhí)行查詢(xún):

GET /bank/_search
{
  "query": { "match_all": {} }
}

這個(gè)例子只是簡(jiǎn)單的使用query:match_all
查詢(xún)匹配全部的document类茂。實(shí)際上耍属,我們還可以給query添加其他參數(shù),通過(guò)其他參數(shù)來(lái)影響搜索結(jié)果巩检,例如sort厚骗,size,from這種兢哭。
如果size沒(méi)有聲明领舰,它的默認(rèn)值是10.
from聲明從哪里開(kāi)始。

GET /bank/_search
{
  "query": { "match_all": {} },
  "from": 10,
  "size": 10
}

from默認(rèn)值是0.

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": { "balance": { "order": "desc" } }
}

這個(gè)例子表明匹配全部,使用balance這個(gè)field進(jìn)行排序冲秽,返回前十個(gè)hit(size默認(rèn)是10)

Executing Searches

進(jìn)一步研究Query DSL舍咖。
通常,查詢(xún)返回的是full JSON document锉桑,它通常在_source field中映射排霉。如果我們只需要特定的字段,則可以限定返回的字段民轴。

GET /bank/_search
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]
}

這個(gè)跟SQL中的SELECT字段表差不多攻柠。

特定字段查詢(xún)

GET /bank/_search
{
  "query": { "match": { "account_number": 20 } }
}

只匹配account_number為20的documents。

GET /bank/_search
{
  "query": { "match": { "address": "mill" } }
}

address中包含mill的documents.

GET /bank/_search
{
  "query": { "match_phrase": { "address": "mill lane" } }
}

address中包含mill :舐恪9迮ァ!或者 lane字段的document

GET /bank/_search
{
  "query": { "match_phrase": { "address": "mill lane" } }
}

address中包含 mill lane的document微驶。

這幾個(gè)例子要好好感悟浪谴。

bool query 布爾查詢(xún)

布爾查詢(xún)?cè)试S我們使用布爾邏輯較小的查詢(xún)組成一個(gè)較大的查詢(xún)。

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}

bool里面有一個(gè)程度參數(shù)祈搜,must,should,must_not
對(duì)應(yīng)計(jì)算機(jī)邏輯的與或非三種邏輯士八,這個(gè)有點(diǎn)像高中的交集容燕,并集,非子集這種婚度。

Executing Filters

這里講一個(gè)細(xì)節(jié)蘸秘,document score(就是hit里面的_score field)。這個(gè)field代表document的匹配度蝗茁,匹配度越高醋虏,_score越高。

但是查詢(xún)并不是需要產(chǎn)生分手哮翘,特別是當(dāng)查只用于“filtering”的document set時(shí)候颈嚼,ElasticSearch檢測(cè)這些情況,并自動(dòng)優(yōu)化查詢(xún)執(zhí)行饭寺,以避免產(chǎn)生無(wú)用的分?jǐn)?shù)阻课。
直接上例子,這里有一個(gè)叫range query的查詢(xún)沒(méi)有介紹過(guò)艰匙。

GET /bank/_search
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}

上面這個(gè)例子中的bool query包含了一個(gè)match_all查詢(xún)限煞,和一個(gè)range query。我們可以 將其他的任何查詢(xún)都替換到query和filter part中员凝,上述的例子中署驻,范圍查詢(xún)是非常有意義的。因?yàn)閷儆诜秶奈臋n都是!M稀瓶蚂!平等匹配的,沒(méi)有任何一個(gè)document比另一個(gè)document更為重要抚官。

除了match_all扬跋,match,bool凌节,range之外钦听,還有許多其他的查詢(xún)方式是可以用的。當(dāng)我們對(duì)他們的工作方式有了基本的了解倍奢,學(xué)習(xí)其他的方法也不困難朴上。

Executing Aggregations(聚合)

聚合提供了從數(shù)據(jù)中分組和提供信息的能力∽渖罚考慮聚合的最簡(jiǎn)單方法時(shí)將其大致等同于SQL的GROUP BY和SQL aggregate function痪宰。
在ElasticSearch中,可以執(zhí)行搜索畔裕,然后多個(gè)搜索返回的結(jié)果聚合來(lái)衣撬。就是你可以運(yùn)行多個(gè)查詢(xún)和聚合,并一次性獲取兩個(gè)操作的結(jié)果扮饶,避免使用多個(gè)API進(jìn)行網(wǎng)絡(luò)返回具练。

一個(gè)簡(jiǎn)單的聚合實(shí)例

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      }
    }
  }
}

我們?cè)O(shè)置size=0是為了不顯示搜索命中,因?yàn)槲覀儾幌M吹骄酆辖Y(jié)果甜无。我們只希望看到聚合的結(jié)果扛点。當(dāng)然,size=0也可以取消岂丘。

聚合可以嵌套聚合陵究。詳情。奥帘。

"aggregations" : {
    "<aggregation_name>" : {
        "<aggregation_type>" : {
            <aggregation_body>
        }
        [,"meta" : {  [<meta_data_body>] } ]?
        [,"aggregations" : { [<sub_aggregation>]+ } ]?
    }
    [,"<aggregation_name_2>" : { ... } ]*
}

這個(gè)玩意確實(shí)很多內(nèi)容铜邮,其中<aggregation_type>就有不下50種了,基本就看到這里寨蹋,要熟悉業(yè)務(wù)去了牲距。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钥庇,隨后出現(xiàn)的幾起案子牍鞠,更是在濱河造成了極大的恐慌,老刑警劉巖评姨,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件难述,死亡現(xiàn)場(chǎng)離奇詭異萤晴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)胁后,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)店读,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人攀芯,你說(shuō)我怎么就攤上這事屯断。” “怎么了侣诺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵殖演,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我年鸳,道長(zhǎng)趴久,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任搔确,我火速辦了婚禮彼棍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膳算。我一直安慰自己座硕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布涕蜂。 她就那樣靜靜地躺著华匾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宇葱。 梳的紋絲不亂的頭發(fā)上瘦真,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天刊头,我揣著相機(jī)與錄音黍瞧,去河邊找鬼。 笑死原杂,一個(gè)胖子當(dāng)著我的面吹牛印颤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穿肄,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼年局,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了咸产?” 一聲冷哼從身側(cè)響起矢否,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脑溢,沒(méi)想到半個(gè)月后僵朗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年验庙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顶吮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粪薛,死狀恐怖悴了,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情违寿,我是刑警寧澤湃交,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站陨界,受9級(jí)特大地震影響巡揍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菌瘪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一腮敌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧俏扩,春花似錦糜工、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嫉戚。三九已至,卻和暖如春帆啃,著一層夾襖步出監(jiān)牢的瞬間窍帝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留压怠,地道東北人飞苇。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像诫舅,于是被迫代替她去往敵國(guó)和親宫患。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • 探索你的數(shù)據(jù) 樣本數(shù)據(jù)集 現(xiàn)在我們對(duì)于基本的東西已經(jīng)有了一些感覺(jué),現(xiàn)在讓我們嘗試使用一些更加貼近現(xiàn)實(shí)的數(shù)據(jù)集卷哩。我已...
    Jason__Ding閱讀 421評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理属拾,服務(wù)發(fā)現(xiàn),斷路器渐白,智...
    卡卡羅2017閱讀 134,708評(píng)論 18 139
  • 博客原文一博客原文二 翻譯作品纯衍,水平有限,如有錯(cuò)誤襟诸,煩請(qǐng)留言指正。原文請(qǐng)見(jiàn) 官網(wǎng)英文文檔 起步 Elasticse...
    rabbitGYK閱讀 3,261評(píng)論 0 68
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,947評(píng)論 2 89
  • 總以為心靈的痛 無(wú)法修復(fù) 原來(lái)生孩子也可以這樣 沒(méi)有人告訴我 她只是默默的承受著 不言不語(yǔ) 只有痛苦的面孔 仰頭看...
    布老頭和他的家人們閱讀 131評(píng)論 0 0