天天看點

Elastic Search實戰-Search API(下)3 Query String Synax

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

繼續閱讀