发布网友 发布时间:2022-11-09 02:17
共1个回答
热心网友 时间:2023-11-14 23:23
Logstash从kafka集群Topic获取数据,解析出其字段,然后写入到ES中,logstash.conf配置如下:
结果有626条,而且HOSTNAME都是timeline11.server.163.org:
HOSTNAME条件设置为timeline111.server.163.org,期望匹配结果为空。
实际结果还是有626条,感觉加的过滤条件不生效。
网上针对这个问题的分析
[ https://stackoverflow.com/questions/23150670/elasticsearch-match-vs-term-query]
修改请求体之后:
结果是符合预期的:
如果使用ES的搜索过程中,发现加了过滤条件不生效,可以尝试以下方法:
1)条件字段是否有keyword,有的话,使用xxx.keyword
attention
ES中的查询操作分为2种:查询(query)和过滤(filter)。查询即是之前提到的query查询,它(查询)默认会计算每个返回文档的得分,然后根据得分排序。而过滤(filter)只会筛选出符合的文档,并不计算得分,且它可以缓存文档。所以,单从性能考虑,过滤比查询更快。
使用过滤语句得到的结果集 -- 一个简单的文档列表,快速匹配运算并存入内存是十分方便的, 每个文档仅需要1个字节。这些缓存的过滤结果集与后续请求的结合使用是非常高效的。
查询语句不仅要查找相匹配的文档,还需要计算每个文档的相关性,所以一般来说查询语句要比 过滤语句更耗时,并且查询结果也不可缓存。详细介绍可以参考:
https://doc.yonyoucloud.com/doc/mastering-elasticsearch/chapter-2/27_README.html