• kibana使用(ELK)、Lucene 查询语法


    Lucene查询

    Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询。

    下面着重介绍下Lucene支持的查询:

    Terms词语查询

    词语搜索,支持 单词 和 语句。

    • 单词,例如:"test","hello"
    • 语句,例如:"hello,world!"

    多个词语可以通过操作符,连接成更复杂的搜索逻辑。

    Field字段查询

    Lucene支持针对某个字段进行搜索,语法如:

    title:hello
    或者
    title:"hello title"

    搜索语句时需要加上双引号,否则:

    title:hello title
    就意味着,搜索title为hello,或者包含title关键字的文档

    Term Modifier修饰符查询

    Lucene支持对词语增加修饰,从而扩大查询的范围。

    WildCard Searches通配符查询

    支持在单个单词或者语句中添加通配符:

    • ?匹配单个字符
    • *匹配0个或多个字符

    例如:

    =>想要搜索test或者text
    
    te?t
    
    =>想要搜索test  tests  tester
    
    test*

    文档中不支持通配符放在搜索的开头,如*test,但是在kibana中是支持这种搜索语法的。

    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
  • 相关阅读:
    Java线程中run和start方法的区别
    dwr+spring集成
    Lucene入门
    struts2之单个文件上传
    利用jQuery接受和处理xml数据
    struts2之多个文件上传
    Google开源项目二维码读取与生成工具ZXing
    C# Regex 深入正则表达式
    android多分辨率多密度下界面适配方案
    [转]C#.net编程创建 Access 文件和 Excel 文件
  • 原文地址:https://www.cnblogs.com/bestzhang/p/8473253.html
Copyright © 2020-2023  润新知