公號:碼農充電站pro
主頁:https://codeshellme.github.io
1,URI 查詢格式
URI 查詢的一般格式如下:
GET /index_name/_search?q=key:val&df=title&sort=year:desc&from=0&size=10
{
"profile":"true"
}
其中的參數代表的含義如下:
- q:用於指定查詢語句,它可以是一個鍵值對,也可以只有一個 val。
- key 表示在哪個字段中查詢。
- val 表示查詢的內容。
- df:查詢中未定義字段前綴時使用的默認字段。如果不指定,默認會對所有字段進行查詢。
- sort:指定排序規則。
- from:與 size 一起用於分頁。
- profile:用於查看查詢執行的詳細過程,可參考這裏。
- 更多的 URI 參數可參考這裏。
2,範查詢
如果查詢時沒有指定字段,就會在所有的字段中查詢,這叫做範查詢。例如 q=2012
。
3,Term:單詞查詢
Term 查詢不需要用引號引住。比如 q=A B
表示包含 A
或 B
。
4,Phrase:詞組查詢
Phrase 查詢需要用引號引住。
比如 q="A B"
,表示包含 "A B"
,並且要求順序一致,實際上此時 "A B"
會被認爲是一個單詞。
5,查詢分組
比如 q=title:A B
,表示的是 title:A
或 B
,會在 title
字段中查詢 A
,在所有的字段中查詢 B
。
而 q=title:(A B)
,只會在 title
中查詢 A
或 B
。(A B)
用括號括住,表示一個分組。
6,布爾查詢
在使用 {"profile":"true"}
查看執行過程時,會有兩個概念 must
和 must_not
:
must
:表示必須存在,用+
表示。must not
:表示必須不存在,用-
表示。
布爾查詢包含下面三種:
- AND:且,比如
q=title:(A AND B)
,表示+title:A +title:B
,表示必須包含A
,也必須包含B
。 - OR:或,比如
q=title:(A OR B)
,等同於q=title:(A B)
,表示title:A title:B
,表示title
中包含A
或包含B
。 - NOT:非,比如
q=title:(A NOT B)
,表示title:A -title:B
,表示包含A
,但不能包含B
。
也可以在查詢中直接使用 +
或 -
, +
用 %2B
(URL 編碼)表示,比如:
q=title:(%2BA -B)
,表示必須包含 A,不能包含 B。q=title:(-A -B)
,表示不能包含 A,也不能包含 B。q=title:(-A %2BB)
,表示不能包含 A,但必須包含 B。q=title:(A %2BB)
,其實等價於q=title:(%2BB)
,表示必須包含 B,A 無所謂。
7,範圍查詢
用於數字類型:
[]
表示閉區間{}
表示開區間
使用的時候用括號括住,比如:
year:({2000 TO 2020])
,表示2000 < year <= 2020
。year:([* TO 2018])
,表示year <= 2018
。year:({2016 TO *})
,表示year > 2016
。
8,通配符與正則查詢
在通配符查詢中:
?
代表 1 個字符*
代表 0 或多個字符
一般通配符查詢效率較低,佔內存大,所以不建議使用,特別是放在最前面。
通配符查詢示例:
title:mi?d
title:be*
正則表達式查詢示例:
title:[bt]oy
9,模糊匹配與近似查詢
示例:
title:beautifl~1
title:"Lord Rings"~2
(本節完。)
推薦閱讀:
Kibana,Logstash 和 Cerebro 的安裝運行
歡迎關注作者公衆號,獲取更多技術乾貨。