之前一直有个问题没解决,比如希望通过kibana的Discover里的filter去过滤某个域名,request为"/"的请求,需求是精确匹配:
那么在Dev Tools里对应的查询应该和下面类似:
GET index-example/_search
{
"query": {
"bool": {
"must": [
{"match": {"http_host": "test.xxx.com"}},
{"match": {"request": "/"}}
]
}
}
}
搜索出来的日志中是不符合需求的,所有request里包含"/"这个字符的请求都被检索到了。
后来了解到2.x版本中的string类型在5.x分为text(默认类型)和keyword。text类似2.x中的analyzed,是要被分词的,整个字符串根据一定规则分解成一个个小写的term,而keyword类似2.x中not_analyzed的情况。
如果你希望检索"good"的时候,可以检索到"this is a good idea",那么使用默认方式即可。
如果你希望检索"good"的时候,只检索到"good",那么应该使用keyword的方式。
例如上述查询语句,我们可以如此修改
GET index-example/_search
{
"query": {
"bool": {
"must": [
{"match": {"http_host.keyword": "test.xxx.com"}},
{"match": {"request.keyword": "/"}}
]
}
}
}