Elasticsearch Query DSL概述與查詢、過濾上下文

      網(wǎng)友投稿 1106 2022-05-29

      從本節(jié)開始,先詳細(xì)介紹Elasticsearch Query DSL語法,該部分是SearchAPI的核心基礎(chǔ)之一。

      Elasticsearch提供了一個(gè)基于JSON的完整查詢DSL(領(lǐng)域特定語言)來定義查詢。把查詢DSL看作是查詢的AST(抽象語法樹),由兩種類型的子句組成:

      Leaf query clauses(葉查詢字句)

      葉子查詢子句指在特定的字段中尋找特定的值,例如匹配、范圍查詢或term(完全匹配)。這些查詢可以單獨(dú)使用。

      Compound query clauses(復(fù)合查詢字句)

      復(fù)合查詢字句包裝其他葉子或復(fù)合字句,用于以邏輯方式組合多個(gè)查詢(如bool、dis_max)或改變他們的行為(如常量查詢)。

      1、query and filter context(查詢與過濾上下文)

      查詢子句的行為取決于它是在查詢上下文中使用還是在過濾上下文中使用:

      查詢上下文

      在查詢上下文中使用的查詢子句,查詢字句回答了“這個(gè)文檔與這個(gè)查詢子句(查詢條件)匹配得有多好?”除了決定文檔是否匹配之外,查詢子句還計(jì)算一個(gè)分?jǐn)?shù),表示相對與其他文檔該文檔匹配的程度。每當(dāng)一個(gè)查詢子句傳遞給查詢參數(shù)(query)時(shí),查詢上下文就會(huì)生效,比如搜索API中的查詢參數(shù)。

      過濾上下文

      在過濾上下文中,查詢子句回答“這個(gè)文檔是否匹配這個(gè)查詢子句?”答案是簡單的“是”或“否”——沒有計(jì)算出分?jǐn)?shù)。過濾上下文主要用于過濾結(jié)構(gòu)化數(shù)據(jù)(相當(dāng)與關(guān)系型數(shù)據(jù)庫的過濾條件)。例如這個(gè)時(shí)間戳是否會(huì)在2015年到2016年之間?文章的狀態(tài)是為“發(fā)布”嗎?等等。

      經(jīng)常使用的過濾器(filter context)會(huì)被Elasticsearch自動(dòng)緩存,以提高性能。每當(dāng)一個(gè)查詢子句被傳遞給過濾器參數(shù)(filter)時(shí),過濾器上下文就會(huì)生效,例如bool查詢中的filter或must_not參數(shù)、或filter查詢中的常量查詢(constant_score)或filter查詢。

      Elasticsearch Query DSL概述與查詢、過濾上下文

      舉例如下:

      GET /_search { "query": { // @1 "bool": { // @2 "must": [ { "match": { "title": "Search" }}, // @3 { "match": { "content": "Elasticsearch" }} // @4 ], "filter": [ // @5 { "term": { "status": "published" }}, // @6 { "range": { "publish_date": { "gte": "2015-01-01" }}} // @7 ] } // end bool } // end query }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      代碼@1:query參數(shù)定義查詢上下文,query參數(shù)為elasticsearch的查詢上下文。

      代碼@2:使用elasticsearch的bool查詢表達(dá)式,會(huì)在后續(xù)詳細(xì)介紹。

      代碼@3:查詢上下文,使用關(guān)鍵字match,表示title字段中包含"Search"字符即認(rèn)為匹配。(可以類比關(guān)系型數(shù)據(jù)庫 a.title like ‘%Search%’)

      代碼@4:查詢上下文,使用關(guān)鍵字match,表示content字段中包含"Elasticsearch"字符即認(rèn)為匹配。

      代碼@5:定義過濾上下文。

      代碼@6:使用term(完整匹配),即status字段的值是否是“published”。(相當(dāng)于關(guān)系型數(shù)據(jù)庫的 a.status = ‘published’)

      代碼@7:使用range,代表范圍匹配,即publish_date字段的值是否大于等于2015-01-01。(相當(dāng)于a.publish_date >= 2015-01-01’)。

      下一篇將開始介紹 elasticsearch 的重頭戲:查詢語法。

      見文如面,我是威哥,熱衷于成體系剖析JAVA主流中間件,關(guān)注公眾號『中間件興趣圈』,回復(fù)專欄可獲取成體系專欄導(dǎo)航,回復(fù)資料可以獲取筆者的學(xué)習(xí)思維導(dǎo)圖。

      Elasticsearch

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Java編程02之Java編碼規(guī)范
      下一篇:WEB開發(fā)-HTML入門學(xué)習(xí)總結(jié)
      相關(guān)文章
      亚洲av日韩av激情亚洲| 亚洲欧洲中文日韩av乱码| 夜夜春亚洲嫩草影院| 日本系列1页亚洲系列| 在线亚洲高清揄拍自拍一品区| 亚洲欧洲日本精品| 91在线亚洲精品专区| 久久久亚洲欧洲日产国码农村| 亚洲啪啪综合AV一区| 亚洲日韩中文无码久久| 77777亚洲午夜久久多人| 国产精品亚洲玖玖玖在线观看| 亚洲天堂中文字幕在线| 亚洲精品乱码久久久久久蜜桃 | 亚洲宅男天堂在线观看无病毒 | 亚洲精品第一国产综合精品 | 亚洲av高清在线观看一区二区| 久久久久亚洲精品无码网址色欲| 亚洲av日韩av永久无码电影| 精品久久久久久亚洲中文字幕| 国产精品亚洲专区无码不卡| 成人亚洲网站www在线观看| 亚洲Av无码乱码在线播放| 亚洲无码高清在线观看| 亚洲中文字幕无码爆乳AV| 亚洲精品无码不卡在线播HE| 亚洲爆乳无码一区二区三区| 亚洲一区二区电影| 91久久亚洲国产成人精品性色| 亚洲欧洲日韩国产| 亚洲熟妇成人精品一区| 日韩精品亚洲专区在线影视| 亚洲午夜无码AV毛片久久| 好看的亚洲黄色经典| 亚洲一二成人精品区| 亚洲婷婷第一狠人综合精品| 亚洲精品宾馆在线精品酒店| 九月婷婷亚洲综合在线| 中文亚洲AV片不卡在线观看| 亚洲国产精品久久久久婷婷软件 | 中中文字幕亚洲无线码|