ElasticSearch URI 查詢

公號:碼農充電站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 表示包含 AB

4,Phrase:詞組查詢

Phrase 查詢需要用引號引住。

比如 q="A B",表示包含 "A B",並且要求順序一致,實際上此時 "A B" 會被認爲是一個單詞

5,查詢分組

比如 q=title:A B,表示的是 title:AB,會在 title 字段中查詢 A,在所有的字段中查詢 B

q=title:(A B),只會在 title 中查詢 AB(A B) 用括號括住,表示一個分組。

6,布爾查詢

在使用 {"profile":"true"} 查看執行過程時,會有兩個概念 mustmust_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

(本節完。)


推薦閱讀:

ElasticSearch 查詢

ElasticSearch 文檔及操作

ElasticSearch 分詞器

ElasticSearch 搜索引擎概念簡介

Kibana,Logstash 和 Cerebro 的安裝運行


歡迎關注作者公衆號,獲取更多技術乾貨。

碼農充電站pro

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章