term查询是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇。 term查询返回在提供的字段中包含确切term的文档。可以使用term查询根据精确的值(例如价格,产品ID或用户名)查找文档。
match也能模糊匹配,并且不区分字段值的大小写。match模糊匹配,先对输入进行分词,对分词后的结果进行查询,文档只要包含match查询条件的一部分就会被返回。match是用于执行全文查询的标准查询,包括模糊匹配和短语或接近查询。
和match查询类似,match_phrase查询首先解析查询字符串来产生一个词条列表。然后会搜索所有的词条,但只保留包含了所有搜索词条的文档,并且词条的位置要邻接。match_phrase 不区分大小写。 match_phrase用于匹配完全匹配的词组或单词接近匹配
对于匹配了短语"quick brown fox"的文档,下面的条件必须为true:
- quick、brown和fox必须全部出现在某个字段中。
- brown的位置必须比quick的位置大1。
- fox的位置必须比quick的位置大2。
注意:如果在查询字符串的中间有通配符* (开头有*无所谓),就应该用wildcard查询,不用match_phrase查询。例如:
wildcard查询不会对查询字符串分词,也不会将查询字符串变成小写(所以要手动将查询字符串变成小写),file_name.keyword数据类型也不会被分词,最后能够匹配想要的结果。
{
"query": {
"bool": {
"must": [
{
"match": {
"event_id": "11"
}
},
{
"match": {
"process_name": "powershell.exe"
}
},
{
"wildcard": {
"file_name.keyword": "*\\__psscriptpolicytest_*.ps1"
}
}
]
}
}
}
multi_match查询以match查询为基础,以允许多字段查询:
如下所示,在ES中New-Object System.Xml.XmlDocument存储的是小写形式,但是match语句写成大写,依然可以查询到相应的数据。
GET logs-endpoint-winevent-*-2019.12.27/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"process_parent_name": "cmd.exe"
}
},
{
"match": {
"process_name": "powershell.exe"
}
},
{
"match": {
"process_command_line": "*New-Object System.Xml.XmlDocument*"
}
}
]
}
}
}
wildcard 查询时要在字段名后面加上keyword,而且区分字段值的大小写。如下所示:
GET logs-endpoint-winevent-*-2019.12.27/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"process_parent_name": "cmd.exe"
}
},
{
"match": {
"process_name": "powershell.exe"
}
},
{
"wildcard": {
"process_command_line.keyword": "*new-object system.xml.xmldocument*"
}
}
]
}
}
}
3、查询多级结构时,使用点号隔开,例如:
GET logs-endpoint-winevent-sysmon-2019.07.29/_search
{
"query": {
"term": {
"winlog.process.thread.id": {
"value": 2444
}
}
}
}
要从_source下一级字段开始,winlog就是在_source下一级字段。
4、增加查询返回的结果条数,from/size,例如:
GET logs-endpoint-winevent-sysmon-2019.11.05/_search
{
"from" : 0, "size" : 40,
"query": {
"bool": {
"must": [
{
"match": {
"process_name": "net.exe"
}
},
{
"match": {
"process_command_line": "net use"
}
}
]
}
}
}
"from" : 0, "size" : 40, 将返回从0到最大40条记录
参考:from/Size
5、aggregation
Elasticsearch聚合使您能够获取有关搜索结果的元信息,并回答诸如“德克萨斯州有多少个帐户持有人”之类的问题。 或“田纳西州的平均帐户余额是多少?” 您可以在一个请求中搜索文档,过滤返回的结果并使用汇总分析结果。
"aggs": {
"process_command_line_count": {
"terms": {
"field": "process_command_line.keyword",
"order": {
"_count": "desc"
},
"min_doc_count": 4
}
}
}
该聚合是对process_command_line字段进行聚合,返回process_command_line字段的值出现的次数大于等于4的情况。
6、
①在kibana 的discovery页面查询数据, 首先确定查询时间范围,开始时间和结束时间都可以精确到s。
注意:这里的时间比json数据中的时间要晚8个小时。要在json数据的时间向后推迟8个小时。
② 再编写查询语句,还可以使用Add filter 缩小 查询范围。
③ 下面这些记录是按照时间先后从下往上排。