elasticsearch 提供的 search api 可以分為 uri search 和 request body search 兩大類。從名稱上可以直觀的看出,uri search 是使用uri的引數傳遞引數給 elasticsearch,request body search 則是將引數放到 body 中進行傳遞,下面我們具體來看一下。
首先我們來看 uri search 的一些引數。
此外,我們還可以通過在請求體中指定 profile 引數來檢視查詢是如何被執行的。
你可以在kibana中執行下面的查詢來看一下 elasticsearch 的查詢是怎樣執行的。
get /movies/_search?q=2012
get /movies/_search?q=title:2012
get /movies/_search?q=2012&df=title
在上面這組查詢中,當我們指定了查詢欄位時, elasticsearch 使用的 query type 是term query。
與之對應的還有 phrase query。
term
如果我們的查詢條件是title:(code review)
,那麼它使用的就是 term query,它等價於查詢 title 中存在 code 或 review 的文件。
phrase
如果我們的查詢條件是title:"code review"
這樣用引號引起來的,那麼它使用的就是 phrase query,它等價於查詢同時存在 code 和 review 的文件,並且 code 出現的順序必須在 review 之前。
這裡你可能會有疑問,為什麼 term query 前後需要加括號,這是 elasticsearch 中的分組概念,如果想要像我們說的那樣,在 titile 欄位中查詢存在 code 或 review 的文件,那麼就必須把它們作為乙個分組進行查詢。這裡你可以自己動手試一下不加括號的情況,看一下 elasticsearch 會如何執行。
term query 中還提供了很多種查詢語法,例如我們可以只用 and、or、not 這樣的字元進行布林操作(需要注意它們都必須大寫),也可以使用加號或減號表示 must 和 must not 的概念。同時區間、萬用字元、甚至是正規表示式查詢。
介紹完 uri search,我們再一起學習一下 request body search,其實在 elasticsearch 中,request body search 是更加常用的查詢方式。因為它能夠支援更多高階的使用方法。
在 request body search 中,我們同樣是用from
和size
來進行分頁,預設的是從0開始,返回10個結果。
排序的方法也是使用sort
,一般建議在「數字型」或「日期型」欄位上進行排序。
對於一些字段比較多的文件,我們並不是每次查詢都需要全部的字段,這時候就可以在 body 中加上_source
欄位來進行過濾。_source
字段可以支援萬用字元,例如_source:["name*"]
,查詢中就只會返回欄位名是 name 開頭的字段。
前面我們聊了 term query 和 phrase query,在 request body search 中,我們使用 match query 來進行類似的操作。
get /movies/_search
}}
在這個例子中,elasticsearch 會幫我們查詢的是 title 中有 lord 或 rings 的文件,如果想要查詢 lord 和 rings,我們需要用到 operator 來進行修改。
get /movies/_search}},
"profile"
:"true"
}
如果要使用 phrase 查詢,只需要把上面的match
替換為match_phrase
即可。
在 phrase 查詢中,可以使用slot
引數來指定可以插入在中間的單詞數量。
get /movies/_search}},
"profile"
:"true"
}
本文我們學習了 elasticsearch 的兩種查詢方法:uri search 和 request body search 。這裡更加推薦使用 request body search,因為它可以支援很多高階用法,這裡我們只介紹了一些比較常用的查詢方法,包括 term query 和 phrase query,也介紹了一些欄位的用法,包括分頁、排序、過濾欄位等。當然,elasticsearch 的 request body search 還支援很多其他引數,由於篇幅限制,就不再一一介紹了,大家在使用時可以自行查閱官方文件。
最後多說一句,關於 elasticsearch,我也是剛剛接觸,歡迎志同道合的同學一起交流。
ElasticSearch入坑指南之概述及安裝
恢復內容開始 elasticsearch入坑指南之概述及安裝 elasticsearch 簡稱es 基於lucene的分布式全文檢索引擎。使用es可以實現近實時的儲存 檢索及海量資料的分析。es可以應用於以下場景 es核心概念 水平拆分 拓展 通過分布式和跨shared操作提公升效能及吞吐 在 sh...
從禪宗入淨土
習禪入定 精通楞嚴 求生淨土 含笑安逝 圓瑛大師,名弘悟,號韜光,又名一吼堂及三求堂主人。他原籍福建古田,俗姓吳,五歲時,父母雙亡,稍長以後,研讀儒書,聰穎絕倫。十八歲時,頓覺人生如夢,急思脫俗,被叔父阻止。次年,他生了大病後,才發誓出家,禮拜興化梅峰寺的增西上人為師。二十歲時,依鼓山湧泉寺的妙蓮和...
Elasticsearch從入門到放棄 再聊搜尋
elasticsearch 提供的 search api 可以分為 uri search 和 request body search 兩大類。從名稱上可以直觀的看出,uri search 是使用uri的引數傳遞引數給 elasticsearch,request body search 則是將引數放到...