Skip to content

Latest commit

 

History

History
121 lines (89 loc) · 4.05 KB

高级搜索说明文档.md

File metadata and controls

121 lines (89 loc) · 4.05 KB

高级搜索说明文档

常用样例

  • 查找状态码(message.status)为400的所有文档

    message.status:400

  • 查找状态码(message.status)为4xx的所有文档

    message.status:[400 TO 499]

  • 查找状态码(message.status)为401,402,404的所有文档

    message.status:(401 OR 402 OR 403) message.status:(401 || 402 || 403)

  • 查找message字段节点内所有节点含有400字符串的所有文档

    message.*:400

  • 查找所有含有400字符串的所有文档

    400

  • 查找状态码(message.status)不是400的所有文档

    NOT message.status:400

  • 正则方式查找客户端IP(message.remote_addr)是212.98.1.*的所有文档

    message.remote_addr:/212.98.1.[0-9]{1,3}/

  • 精确查找请求路径(message.uri)是/a/b?uss的所有文档

    message.uri:"/a/b?uss"

  • 查找请求路径(message.uri)以/a/b开头的所有文档

    message.uri:/a/b*

  • 查找请求路径(message.uri)含有/b的所有文档

    message.uri:*/b*

  • 查找状态码(message.status)是400并且请求路径(message.uri)以/a/b开头的所有文档

    message.status:400 AND message.uri:/a/b*

  • 查找请求长度(message.request_length)大于100的所有文档

    message.request_length:>100

  • 查找客户端IP(message.remote_addr)是33.1.2.7编辑距离为1的所有文档

    message.remote_addr:33.1.2.7~1

  • 查找同时含有指定字符串502和test.baishancloud.com且不含有指定字符串124.1.1.7

    +502 +test.baishancloud.com -124.1.1.7 502 AND test.baishancloud.com NOT 124.1.1.7

  • 查找请求路径(message.uri)与指定单词组(hello user)顺序接近的所有文档

    "hello user"~1

特殊字符

*

模糊查找代表匹配0个或多个字符

?

模糊查找代表匹配1个字符

/

表示使用正则表达式

\

用于转义当前特殊字符

:

用于字段名和搜索值的分隔符

(和)

查找优先级关系

{和}

范围查找表示开区间

[和]

范围查找表示闭区间

>

算术比较大于

<

算术比较小于

~

使用编辑距离查找文档

+

表示过滤的文档一定出现,类似AND

-

表示过滤的文档一定不出现,类似NOT

注意事项

  1. 在使用正则方式进行匹配时,待匹配的值的类型不可以是数字类型(字段类型可通过数据管理=》索引管理查看)
  2. 在使用正则方式进行匹配时,不支持的匹配字符有**^(以指定字符开头)和$**(以指定字符结束)
  3. 编辑距离(Edit Distance)表达中~N在针对字符时,表示N个字符,N的默认值是2
  4. 对于查找接近符合指定单词组顺序的文档~N表示编辑距离为N的单词,和上述字符同理,只是对于单词来说,N表示完整单词的编辑距离
  5. 关键词ANDORNOT不可以使用小写
  6. 被查找的文档在查找时会自动忽略字符大小写

原理简介

高级搜索功能来源于kibana的数据探索(Discover),因此可以使用此功能实现访问与选定索引模式匹配的每个索引中的每个文档。 其基本原理是由输入内容拼接基于Elasticsearch的查询语句。例如查询原始日志中uri字段值为/a/b?uss的文档,则在输入框内输入message.uri:"/a/b?uss",而实际发送的请求方式是:

{
    "must":[
        {
            "query_string":{
                "query":"message.uri:\"/a/b?uss\"",
                "default_field":"*",
                "analyze_wildcard":true
            }
        }
    ]
}

也即是把query_string请求中的query字段内容更换成搜索的内容,然后直接查询Elasticsearch中的文档。

官方文档

更多详细内容 https://www.elastic.co/guide/en/kibana/6.4/kuery-query.html https://www.elastic.co/guide/en/elasticsearch/reference/6.4/query-dsl-query-string-query.html