elasticsearch搜尋

weixin_34321977發表於2017-05-16

底層原理先不說,後面再看。先把搜尋總結一下。

curl -XGET http://127.0.0.1:9200/logstash-2015.06.21/testlog/_search?q=first

elasticsearch支援很多搜尋形式,但是query語法和kibana後面聯絡最大,所以總結一下

query語法

  • 全文檢索:直接寫搜尋的單詞,如 first;
  • 單欄位的全文檢索:在搜尋單詞之前加上欄位名和冒號,比如如果知道單詞 first 肯定出現在 mesg 欄位,可以寫作 mesg:first;
  • 單欄位的精確檢索:在搜尋單詞前後加雙引號,比如 user:"chenlin7";
  • 多個檢索條件的組合:可以使用 NOT, AND和 OR 來組合檢索,注意必須是大寫。比如 user:("chenlin7" OR "chenlin") AND NOT mesg:first;
  • 欄位是否存在:exists:user表示要求 user 欄位存在,missing:user表示要求 user 欄位不存在;
  • 萬用字元:用 ? 表示單字母,表示任意個字母。比如 fir?t mess
  • 正則:需要比萬用字元更復雜一點的表示式,可以使用正則。比如 mesg:/mes{2}ages?/。注意 ES 中正則效能很差,而且支援的功能也不是特別強大,儘量不要使用。ES 支援的正則語法見:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#regexp-syntax
  • 近似搜尋:用 ~
    表示搜尋單詞可能有一兩個字母寫的不對,請 ES 按照相似度返回結果。比如frist~;
  • 範圍搜尋:對數值和時間,ES 都可以使用範圍搜尋,比如:rtt:>300,date:["now-6h" TO "now"} 等。其中,
    []表示端點數值包含在範圍內,{}表示端點數值不包含在範圍內;

相關文章