通過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"
} - q=title:2012 / q=2012
-
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 或多個字元