3 Query String Synax
3.1 term 與 phrase
// 表示 java 或 gao,隻包含某一個就符合查詢需求
java gao
// 表示詞語查詢,要求先後順序,必須是 java gao 連起來
"java gao"
3.2 泛查詢
- 不指定字段查詢,而是在所有字段中比對 term
-
還可指定字段查詢, 文法
《 字段名:要查詢的值 》
3.3 Group 分組設定
使用括号指定比對的優先級規則。
表示必須先判斷前面括号裡的,再判斷後面的
(quick OR brown) AND fox
表示 status 字段的值是 active 或者 pending。如果不加括号,status:active OR pending 表示 status 字段的值是 active 或者全部字段的值是 pending。因為 es 如果不指定字段,可能會按全部字段去比對。
status:(active OR pending) title:(full text search)
3.4 布爾操作符
AND( && )、OR( || )、NOT( ! )注意隻能大寫
//可以包含 tom 但不要有 lee
username:(tom NOT lee)
加号➕:must 表示注意➕在 url 中會被解析成空格,要使用 encode 後的結果,就是 %2B
減号➖:must_not
//下面兩個都表示可以包含 tom,一定包含 lee,也一定不包含 seina
//由此可見 ➕➖可以簡化查詢語句寫法
username:(tom +lee -seina)
username:((lee && !seina) || (tom && lee && !seina))
3.5 範圍查詢
區間寫法:閉區間用 [],開區間用 {}
age:[1 TO 10] //表示 1 <= age <= 10
age:{1 TO 10} //表示 1 <= age < 10
age:[1 TO ] //表示 age >= 10
age:[* TO 10] //表示 age <= 10
算數符号寫法:>=、<=
age:>= 1
age:(>= 1 && <= 10) 或者 age:(+ >= 10 + <= 10)
6)通配符查詢
?代表一個字元,* 代表 0 個或多個字元
name:t?m
name:tom*
通配符比對執行效率低,且占用較多記憶體,不建議使用,如無特殊需求,不要将 ?或者 * 放在前面
7)模糊比對
name:roam~1 //表示比對與 roam 差 1 個 character 的詞,比如 foam roams 等
8)近似度查詢
//以 term 為機關進行差異比較,允許在 quick 和 fox 之間插入一個詞,比如 “quick fox”“quick brown fox” 都會被比對
“quick fox”~1
如需了解 Request Body Search,請點選上文 Elasticsearch Search API - Request Body Search