kibana使用(ELK)、Lucene 查詢語法

Lucene查詢

Lucene查詢語法以可讀的方式書寫,而後使用JavaCC進行詞法轉換,轉換成機器可識別的查詢。php

下面着重介紹下Lucene支持的查詢:css

Terms詞語查詢

詞語搜索,支持 單詞 和 語句。html

  • 單詞,例如:"test","hello"
  • 語句,例如:"hello,world!"

多個詞語能夠經過操做符,鏈接成更復雜的搜索邏輯。apache

Field字段查詢

Lucene支持針對某個字段進行搜索,語法如:api

title:hello 或者 title:"hello title"

搜索語句時須要加上雙引號,不然:ruby

title:hello title 就意味着,搜索title爲hello,或者包含title關鍵字的文檔

Term Modifier修飾符查詢

Lucene支持對詞語增長修飾,從而擴大查詢的範圍。bash

WildCard Searches通配符查詢

支持在單個單詞或者語句中添加通配符:markdown

  • ?匹配單個字符
  • *匹配0個或多個字符

例如:post

=>想要搜索test或者text

te?t

=>想要搜索test  tests  tester

test*

文檔中不支持通配符放在搜索的開頭,如*test,可是在kibana中是支持這種搜索語法的。ui

Fuzzy Searches模糊詞查詢

支持搜索模糊詞,若是想要搜索模糊詞,須要在詞語後面加上符號~

例如:

=>想要搜索和test相近的詞 test~ 能夠搜索出text或者tests等詞

也支持在~後面添加模糊係數,模糊係數[0-1],越靠近1表示越相近,默認模糊係數爲0.5。

test~0.8

Proximity Searches鄰近詞查詢

前面的模糊詞只是針對某個單詞,在語句間也存在模糊搜索的概念,只不過不是單詞的模糊,而是單詞之間內容的模糊。

注意要使用雙引號`""`包圍

例如:

=>想要搜索包含"hello""world"的文檔,這兩個單詞中間能夠有一部份內容(這部份內容經過字符個數限制) "hello world"~10 能夠匹配"hello 123 world" 或者"hello,Tom,world"

Range Searches範圍查詢

支持範圍搜索,能夠指定最小值和最大值,會自動查找在這之間的文檔。若是是單詞,則會按照字典順序搜索。

  • {}尖括號表示不包含最小值和最大值,能夠單獨使用
  • []方括號表示包含最小值和最大值,能夠單獨使用

例如:

=>搜索成績grade字段小於等於80分,大於60分的 grade:{60,80] =>搜索名字在A和C之間的 name:{A,C} 返回,bone、baby、barry 

Boosting a Term詞語相關度查詢

若是單詞的匹配度很高,一個文檔中或者一個字段中能夠匹配屢次,那麼能夠提高該詞的相關度。使用符號^提升相關度。

例如:

=>提升jarkarta的比重
jakarta apache

能夠採用下面的語法:

jakarta^4 apache

Boolean Operator布爾操做符

支持多種操做符:

AND

AND操做符用於鏈接兩個搜索條件,僅當兩個搜索條件都知足時,才認爲匹配。一般用來作交集操做。也能夠使用&&替換。

注意必須使用大寫。若是不使用AND,而是and,可能會被單作關鍵詞進行搜索!

例如:

=> 搜索同時包含tom和john的文檔

tom AND john
或者
tom && john

OR

OR操做符用於鏈接兩個搜索條件,當其中一個條件知足時,就認爲匹配。一般用來作並集操做。也能夠使用||替換。

注意必須使用大寫。

例如:

=>搜索包含tom或者john的文檔

tom OR john
或者
tom || john

NOT

NOT操做符排除某個搜索條件。一般用來作差集操做也能夠使用!替換。

注意必須大寫。

例如:

=>搜索包含tom,不包含john的文檔

tom NOT john
或者
tom && !john

在kibana中支持單獨使用,如:

=>排除包含test的文檔 NOT test

+

包含該操做符後跟着的搜索條件,如:

=>搜索包含tom的文檔

+tom

做用於AND的差很少,可是支持單獨使用

-

排除該操做符後跟着的搜索條件,如:

=>搜索不包含tom的文檔

-tom

效果相似NOT

Grouping分組

支持使用小括號對每一個子句進行分組,造成更爲複雜的查詢邏輯。

例如:

=>要搜索包含hello的文檔中,也包含tom或者john的

hello AND (tom OR john) 

也支持在字段中使用小括號:

=>要搜索標題中,既包含return 也包含pink panther的

title:(+return +"pink panther")

Escaping Special Character轉義字符

因爲Lucene中支持不少的符號,如

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

所以若是須要搜索 (1+1):2 須要對改串進行轉換,使用字符\

\(1\+1\)\:2



elk不一樣之處

對與範圍查詢:
lucene :{A,C} 而elk則:{A TO B}
例如:elk的一個查詢:
@timestamp:{"now-10m"  TO  "now"} AND  message : "come in ActivityCommonService_pz"  &&  (1517391575588 OR 1112796)     +\[5.23.0\]  AND @version:[0 TO 2]

 



轉載:https://www.cnblogs.com/xing901022/p/4974977.html
相關文章
相關標籤/搜索