通過URI query 實現搜尋
GET /users/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s
{
"profile": "true"
}
- q指定查詢語句,使用Query String Syntax
- df 預設欄位,不指定時
- Sort 排序 / from 和size 用於分頁
- Profile 可以檢視查詢時如何被執行的
Query String Synctax
指定欄位 vs 泛查詢
q=title:2012 / q=2012
//只對title欄位進行查詢 GET /movies/_search?q=2012&df=title //泛查詢 ,正對_all ,所有欄位 GET /movies/_search?q=2012 { "profile": "true" } //對自定欄位進行查詢 跟 df 等效 GET /movies/_search?q=title:2012 { "profile": "true" }
Term vs Phrase
Beautiful Mind 等效於 Beautiful OR Mind
“Beautiful Mind”,等效於Beautiful AND Mind。Phrase 查詢,還要求前後順序儲存一致
//使用引號。Phrase GET /movies/_search?q=title:"Beautiful Mind" { "profile": "true" } //查詢美麗心靈,Mind為泛查詢 // 意思就是說 title 是Term 查詢 "Beautiful" ,對所有欄位查詢"Mind" GET /movies/_search?q=title:Beautiful Mind { "profile": "true" }
分組和引號
- title:(Beautiful AND Mind)
- title=”Beautiful Mind”
//分組,Bool 查詢 type:BooleanQuery GET /movies/_search?q=title:(Beautiful Mind) { "profile": "true" }
布林操作
AND / OR / NOT 或者 && / || / !
必須大寫
title:(matrix NOT reloaded)
// type:BooleanQuery // title 裡面必須包括Beautiful 跟 Mind GET /movies/_search?q=title:(Beautiful AND Mind) { "profile": "true" } // type:BooleanQuery //必須包括Beautiful 但不包括 Mind GET /movies/_search?q=title:(Beautiful NOT Mind) { "profile": "true" } // type:BooleanQuery //包括Beautiful必須有Mind GET /movies/_search?q=title:(Beautiful %2BMind) { "profile": "true" }
分組
- +表示 must
- -表示 must_not
- title:(+matrix -reloaded)
範圍查詢
- 區間表示:[] 閉區間 ,{} 開區間
- year:{2019 TO 2018}
- year:[* TO 2018]
- 區間表示:[] 閉區間 ,{} 開區間
算數符號
- year:>2010
- year(>2010 && <=2018)
- year:(+>2010 +<=2018)
//範圍查詢,區間寫法 / 數學寫法 GET /movies/_search?q=year:>=1980 { "profile": "true" }
萬用字元查詢(萬用字元查詢效率低,佔用內容大,不建議使用。特別是放在最前面)
- ?代表1個字元,* 代表0 或多個字元
- title:mi?d
- title:be*
//萬用字元查詢 GET /movies/_search?q=ttile:b* { "profile": "true" }
- 正則表達
- title:[bt]oy
- 模糊匹配與近似查詢
- title:befutifl~1
- title:”lord rings” ~2
//模糊匹配 //使用者輸錯,還能找到 GET /movies/_search?q=ttile:beautifl~1 { "profile": "true" } // 近似度匹配 可查出 Lord of the Rings GET /movies/_search?q=ttile:"Lord Rings" ~2 { "profile": "true" }
- ?代表1個字元,* 代表0 或多個字元
本作品採用《CC 協議》,轉載必須註明作者和本文連結