ElasticSearch查詢 第一篇:搜索API

ElasticSearch查詢 第一篇:搜索API

ElasticSearch查詢 第二篇:文檔更新

ElasticSearch查詢 第三篇:詞條查詢

ElasticSearch查詢 第四篇:匹配查詢(Match)

ElasticSearch查詢 第五篇:布爾查詢

不同于SQL語言陨献,對(duì)ElasticSearch引擎發(fā)送的查詢請(qǐng)求,有兩種方式:第一種方式是使用RESTful 風(fēng)格的API請(qǐng)求對(duì)數(shù)據(jù)進(jìn)行搜索或更新懂更,這意味著眨业,必須使用搜索API向ElasticSearch引擎發(fā)起搜索請(qǐng)求急膀;第二種方式是使用Qeury DSL,將查詢語言封裝成JSON結(jié)構(gòu)龄捡,在JSON結(jié)構(gòu)中卓嫂,封裝查詢請(qǐng)求的參數(shù),作為請(qǐng)求主體(Request Body)聘殖,發(fā)送給ElasticSearch引擎處理晨雳。

DSL是領(lǐng)域?qū)S谜Z言(Domain-Specific?Language)的首字母縮寫,是一種通用的大數(shù)據(jù)查詢語言奸腺,用于實(shí)現(xiàn)海量數(shù)據(jù)的檢索分析餐禁。

本系列是ElasticSearch的入門文章,用于介紹搜索API的使用方法突照,只求快速入門帮非,想要深入了解,最好的文檔永遠(yuǎn)是官方手冊(cè)讹蘑。

一末盔,約定格式

在《ElasticSearch查詢》系列文章中,為了簡(jiǎn)化描述座慰,突出重點(diǎn)陨舱,約定將URL字符串中host:port/index/type 省略,

curl -XGET'http://localhost:9200/twitter/tweet/_search?q=user:kimchy'

簡(jiǎn)寫為只包含“HTTP動(dòng)詞+端點(diǎn)+查詢參數(shù)”的簡(jiǎn)寫格式角骤,如下:

GET /_search?q=user:kimchy

將帶有POST請(qǐng)求主體的查詢隅忿,如下:

curl -XGET'http://localhost:9200/twitter/tweet/_search'-d'{"query" : {

? ? ? ? "term": {"user":"kimchy" }

? ? }

}'

簡(jiǎn)寫為只包含“HTTP動(dòng)詞+端點(diǎn)+請(qǐng)求主體JSON”的格式,如下:

GET /_search -d

{

? ? "query" : {

? ? ? ? "term": {"user":"kimchy" }

? ? }

}

二邦尊,查詢端點(diǎn)(Endpoint)

查詢端點(diǎn)允許RESTful API或客戶端查詢ElasticSearch引擎中存儲(chǔ)的數(shù)據(jù)背桐,通過HTTP動(dòng)詞定義操作,通過URI定位數(shù)據(jù)資源蝉揍。

1链峭,用于搜索數(shù)據(jù)的端點(diǎn)

查詢ElasticSearch引擎,主要使用_search 和_query端點(diǎn)又沾,_search端點(diǎn)允許執(zhí)行搜索查詢弊仪,返回查詢結(jié)果。在_search端點(diǎn)上杖刷,能夠執(zhí)行RESTful API查詢和Qeury DSL查詢励饵,例如一下腳本:

GET /_search?q=user:kimchy

GET /_search -d

{

? ? "query" : {

? ? ? ? "term": {"user":"kimchy" }

? ? }

}

ElasticSearch的所有查詢請(qǐng)求都發(fā)送到_search端點(diǎn),對(duì)于_query端點(diǎn)滑燃,只用于將查詢的結(jié)果刪除:

DELETE /_query?q=user:kimchy

2役听,分析端點(diǎn)(_analyze)

分析端點(diǎn)_analyze,用于對(duì)查詢參數(shù)進(jìn)行分析,并返回分析的結(jié)果

POST /_analyze?field=title -dElasticSearch Sever

3典予,計(jì)數(shù)端點(diǎn)(_count)

在計(jì)數(shù)端點(diǎn)_count上甜滨,執(zhí)行查詢,獲取滿足查詢條件的文檔數(shù)量

GET /_count?q=user:jim

4瘤袖,解釋端點(diǎn)(_explain)

用于驗(yàn)證指定的文檔是否滿足查詢條件衣摩,格式是index/type/_id/_explain,例如

GET index/type/1/_explain?q=message:search

三捂敌,根據(jù)文檔標(biāo)識(shí)ID搜索單個(gè)文檔

根據(jù)文檔標(biāo)識(shí)符搜索文檔時(shí)艾扮,使用“index/type/_id” 格式,如下黍匾,搜索文檔標(biāo)識(shí)為13的文檔:

GET/13

四栏渺,檢查是否有文檔滿足查詢條件

GET /_search/exists?q=user:kimchy

五,URI搜索

請(qǐng)求參數(shù)位于_search端點(diǎn)之后锐涯,參數(shù)之間使用&分割磕诊,例如:

GET/_search?pretty&q=title:azure&explain=true&from=1&size=10&sort=title:asc&fields:user,title,content

1,pretty參數(shù)

默認(rèn)情況下纹腌,API返回的JSON對(duì)象忽略換行符霎终,在請(qǐng)求(Request)中加上pretty參數(shù),強(qiáng)制ElasticSearch引擎在響應(yīng)(Response)中加上換行符升薯,使返回的結(jié)果集JSON可讀莱褒。

2,查詢條件(q)參數(shù)

查詢條件(q)參數(shù)用于指定返回的文檔必須匹配的查詢條件涎劈,例如:q=title:azure广凸,指定搜索title字段中包含azure關(guān)鍵字的文檔;

可以設(shè)置一個(gè)字段包含多個(gè)關(guān)鍵字蛛枚,關(guān)鍵字之間使用空格或逗號(hào)分隔谅海,例如:q=title:(azure,aws,cloud),或 q=title:(azure aws cloud)蹦浦,指定搜索title字段中包含azure扭吁,aws或cloud的文檔;只要title字段包含任意一個(gè)關(guān)鍵字盲镶,文檔就滿足查詢條件侥袜;

q參數(shù)可以指定搜素一個(gè)短語,短語使用雙引號(hào)標(biāo)識(shí)溉贿,例如:q=title:"azure vs aws"枫吧,指定搜索title中包含短語“azure vs aws”的文檔;

在查詢條件中宇色,也可以指定操作符:+或-由蘑,操作符 + 用于指定返回的文檔必須匹配查詢條件闽寡;操作符 - 用于指定返回的文檔不匹配查詢條件;操作符之間以空格分隔尼酿,操作符是位于查詢條件=號(hào)右側(cè),字段前面植影,例如 q=+title:azure -title:aws裳擎,指定搜索字段title中只能包含azure,不能包含aws思币;

3鹿响,默認(rèn)操作符(default_operator)參數(shù)

在API中可以包含多個(gè)查詢條件q,默認(rèn)條件下谷饿,多個(gè)查詢條件之間的關(guān)系是或(or)關(guān)系惶我,例如:q=title:azure&q=content:azure,指定搜索title字段中包含azure關(guān)鍵字博投,或者content字段中包含azure關(guān)鍵字的文檔绸贡。

查詢條件之間的邏輯關(guān)系由默認(rèn)操作符(default_operator)參數(shù)指定,默認(rèn)值是or毅哗,該屬性可以設(shè)置為and 或 or听怕;

當(dāng)設(shè)置為or時(shí),只要一個(gè)查詢條件(q)滿足虑绵,就返回文檔尿瞭;例如:q=title:azure&q=content:azure&default_operator=or

當(dāng)設(shè)置為and時(shí),所有的查詢條件都滿足時(shí)翅睛,才返回文檔声搁;例如:q=title:azure&q=content:azure&default_operator=and

對(duì)于查詢:q=title:(azure,aws)&q=content:(azure,aws),表示搜索文檔的字段title或content捕发,只要字段值中出現(xiàn)azure 或 aws關(guān)鍵字疏旨,就表示該文檔匹配查詢條件,作為查詢結(jié)果返回爬骤。

4充石,投影字段(fields)參數(shù)

默認(rèn)情況下,返回的每個(gè)文檔都包括_index,_type,_id,_score和_source字段霞玄,投影參數(shù) fields 用于指定返回的字段列表骤铃。在查詢時(shí),通過fields參數(shù)坷剧,指定一個(gè)以逗號(hào)分隔的字段列表惰爬,這些字段的store屬性必須設(shè)置為true,或存在于_source字段中惫企。默認(rèn)情況下撕瞧,fields字段的參數(shù)值是_source陵叽。可以指定一個(gè)或多個(gè)字段丛版,字段之間以逗號(hào)分隔:

fields=title

fields=title,user

5巩掺,排序(sort)參數(shù)

排序(sort)參數(shù),用于對(duì)結(jié)果進(jìn)行排序页畦,使ElasticSearch按照指定的字段對(duì)結(jié)果進(jìn)行排序胖替,值是fieldName:asc/fieldName:desc,默認(rèn)是升序排序豫缨,可以有多個(gè)排序字段独令,排序字段之間以逗號(hào)分割,例如:sort=field1:asc,field:desc

6好芭,其他參數(shù)

解釋(explain)參數(shù):設(shè)置為true時(shí)燃箭,ElasticSearch將在結(jié)果中的文檔中包含額外的解釋信息;

分頁(from和size)參數(shù)舍败,用于指定結(jié)果窗口招狸,from參數(shù)指定結(jié)果從哪個(gè)記錄開始返回,默認(rèn)值是0瓤湘;size參數(shù)定義了返回結(jié)果的最大文檔數(shù)量瓢颅,默認(rèn)值是10,參數(shù)示例:from=10&size=15

小寫詞條(lowercase_expanded_terms)參數(shù):自動(dòng)將詞條轉(zhuǎn)換成小寫弛说,默認(rèn)值是true挽懦;

分析通配符(analyze_wildcard)參數(shù):通配符或前綴是否被分析,默認(rèn)值是false木人;

六信柿,查詢請(qǐng)求

搜索API可以轉(zhuǎn)換為查詢請(qǐng)求,如下代碼醒第,查詢請(qǐng)求的查詢條件是詞條查詢渔嚷,查詢參合URI搜索的參數(shù)是對(duì)應(yīng)的:

GET /_search -d

{?

? "from":0,

? "size":10,

? "sort":[?

? ? ? {"post_date":{"order":"asc"}},

? ? ? { "name":"desc" }

? ],

? "fields":["name","postDate","age"],

? "query":{?

? ? ? "term":{"user":"kimchy"}

? }

}

1,查詢條件

在查詢條件結(jié)點(diǎn)"query"中稠曼,指定查詢的類型是詞條(Term)形病,在詞條中指定查詢的條件,例如霞幅,只要User中包含kimchy關(guān)鍵字漠吻,就滿足查詢條件:

"query" : {

? ? ? ? "term": {"user":"kimchy" }

}

2,排序

排序sort字段指定排序的字段及其排序的方向司恳,并且排序值(Sort Value)作為查詢結(jié)果返回:

"sort":[?

? {? "post_date":{"order":"asc" }},

? {? "name":"desc"? }

]

排序的方向:升序asc途乃,降序desc,對(duì)于_score字段扔傅,默認(rèn)的排序方式是降序desc耍共,對(duì)于其他字段烫饼,默認(rèn)的排序方向是asc。

當(dāng)對(duì)字符串字段進(jìn)行排序時(shí)试读,該字段最好不被分詞(analyzed或tokenized)杠纵,如果字符串字段被分析,那么ElasticSearch引擎將隨機(jī)選取字段的一個(gè)分詞(Term)進(jìn)行排序钩骇,這可能不是你想要的排序值淡诗。

3,投影伊履,選取返回的字段

投影字段(fields),用來限制返回的字段款违,該字段必須存儲(chǔ)在倒排索引中唐瀑,也就是說,在索引映射中插爹,該字段的store屬性為ture哄辣。推薦使用_source字段,從文檔源數(shù)據(jù)中赠尾,指定需要返回的字段力穗。示例,使用_source 字段气嫁,控制結(jié)果hits數(shù)組中当窗,每個(gè)文檔_source字段必須返回的字段:

{

? ? "_source": {

? ? ? ? "include": ["filed1","field2" ],

? ? ? ? "exclude": [ "field3" ]

? ? },

? ? "query" : {

? ? ? ? "term": {"user":"kimchy" }

? ? }

}

4,窗口字段

窗口字段 from 和 size寸宵,用來限制返回的文檔數(shù)量

來源:http://www.cnblogs.com/ljhdo/p/4486978.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末崖面,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子梯影,更是在濱河造成了極大的恐慌巫员,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甲棍,死亡現(xiàn)場(chǎng)離奇詭異简识,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)感猛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門七扰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人唱遭,你說我怎么就攤上這事戳寸。” “怎么了拷泽?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵疫鹊,是天一觀的道長(zhǎng)袖瞻。 經(jīng)常有香客問我,道長(zhǎng)拆吆,這世上最難降的妖魔是什么聋迎? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮枣耀,結(jié)果婚禮上霉晕,老公的妹妹穿的比我還像新娘。我一直安慰自己捞奕,他們只是感情好牺堰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颅围,像睡著了一般伟葫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上院促,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天筏养,我揣著相機(jī)與錄音,去河邊找鬼常拓。 笑死渐溶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弄抬。 我是一名探鬼主播茎辐,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼眉睹!你這毒婦竟也來了荔茬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤竹海,失蹤者是張志新(化名)和其女友劉穎慕蔚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斋配,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孔飒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艰争。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坏瞄。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖甩卓,靈堂內(nèi)的尸體忽然破棺而出鸠匀,到底是詐尸還是另有隱情,我是刑警寧澤逾柿,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布缀棍,位于F島的核電站宅此,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏爬范。R本人自食惡果不足惜父腕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望青瀑。 院中可真熱鬧璧亮,春花似錦、人聲如沸斥难。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哑诊。三九已至躬络,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搭儒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工提茁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淹禾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓茴扁,卻偏偏與公主長(zhǎng)得像铃岔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子峭火,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢集API 參...
    陽光小鎮(zhèn)少爺閱讀 3,823評(píng)論 0 8
  • 博客原文一博客原文二 翻譯作品毁习,水平有限,如有錯(cuò)誤卖丸,煩請(qǐng)留言指正纺且。原文請(qǐng)見 官網(wǎng)英文文檔 起步 Elasticse...
    rabbitGYK閱讀 3,253評(píng)論 0 68
  • 第3章 映射 映射是定義存儲(chǔ)和索引的文檔類型以及字段的過程。索引中的每一個(gè)文檔都有一個(gè)類型稍浆,每種類型都有它自己的映...
    MR_ChanHwang閱讀 2,305評(píng)論 0 1
  • 進(jìn)程與線程 進(jìn)程(process)是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序载碌,是系統(tǒng)資源分配的基本單位,在內(nèi)存 中有其完備...
    關(guān)耳木水閱讀 430評(píng)論 0 0
  • 好像一只張牙舞爪的螃蟹虛張聲勢(shì)的掩飾衅枫。也像一首慷慨激昂的后搖嫁艇,振奮人心的節(jié)奏里卻掛不住眼淚。 我背著厚厚的盔甲弦撩,對(duì)...
    HahaPbbt閱讀 295評(píng)論 0 2