ES搜索条件不生效问题分析

Logstash从kafka集群Topic获取数据,解析出其字段,然后写入到ES中,logstash.conf配置如下:

input {
     kafka {
        bootstrap_servers => "ip1:9094,ip2:9094,ip3:9094"
        auto_offset_reset => "latest"
        group_id => "lo"  
        id => "8.0.6"
        client_id => "logstash-1"
        check_crcs => "false"
    topics => ["exception_log"]
        codec => "json"
        }
}

filter{
        json {
                source => "body"
        }
} 

output {
      elasticsearch {
                hosts => ["es1:9200","es2:9200","es3:9200"]
                index => "exception-%{+YYYY.MM.dd}"
        }
}

写入完成后,查询其结果:

 {
        "_index": "exception-2019.04.30",
        "_type": "doc",
        "_id": "ssvZbGoB9BdDCt57XEyk",
        "_score": 1,
        "_source": {
          "nanos": "0",
          "success": true,
          "msg": "Add TimelineEntry success",
          "@timestamp": "2019-04-30T06:05:44.661Z",
          "errorInfo": "",
          "timestamp": "1556604344651",
          "type": "ShareTimelineImpl",
          "priority": "INFO",
          "@version": "1",
          "userId": 521585010,
          "body": """{"errorInfo":"","msg":"Add TimelineEntry success","success":true,"type":"ShareTimelineImpl","userId":521585010}""",
          "fields": {
            "_ds_unique_id": "452:65025:3752073:21855ca9:244477118",
            "HOSTNAME": "timeline11.server.163.org"
          },
          "host": ""
        }
      },

搜索userID=526952388的结果

GET /lofter-exception-2019.04.30/_search
{"query": {
    "bool": {
      "must": [
        {"match": {
          "userId": 526952388
        }}
      ]
    }
  }
}

结果有626条,而且HOSTNAME都是timeline11.server.163.org:

 "hits": {
    "total": 626,
    "max_score": 1,
    "hits": [
      {
        "_index": "lofter-exception-2019.04.30",
        "_type": "doc",
        "_id": "t5_cbGoBnt41zOK2Ltpc",
        "_score": 1,
        "_source": {
          "nanos": "0",
          "success": true,
          "msg": "Add TimelineEntry success",
          "@timestamp": "2019-04-30T06:08:50.150Z",
          "errorInfo": "",
          "timestamp": "1556604530017",
          "type": "ShareTimelineImpl",
          "priority": "INFO",
          "@version": "1",
          "userId": 526952388,
          "body": """{"errorInfo":"","msg":"Add TimelineEntry success","success":true,"type":"ShareTimelineImpl","userId":526952388}""",
          "fields": {
            "_ds_unique_id": "452:65025:3752065:c732bf64:243554598",
            "HOSTNAME": "timeline11.server.163.org"
          },
          "host": ""
        }
      },

想根据userID和HOSTNAME以及success的条件进行过滤。

HOSTNAME条件设置为timeline111.server.163.org,期望匹配结果为空。

GET /exception-2019.04.30/_search
{"query": {
  "bool": {
    "must": [
            {
        "match": {
          "fields.HOSTNAME": "timeline111.server.163.org"
        }
      },
      {"match": {
        "userId": 526952388
      }},
      {
        "match": {
          "success": true
        }
      }
    ]
  }
}
, "_source": ["userId","body","fields.HOSTNAME"]
}

实际结果还是有626条,感觉加的过滤条件不生效。

"hits": {
    "total": 626,
    "max_score": 1.4777467,
    "hits": [
      {
        "_index": "lofter-exception-2019.04.30",
        "_type": "doc",
        "_id": "t5_cbGoBnt41zOK2Ltpc",
        "_score": 1.4777467,
        "_source": {
          "body": """{"errorInfo":"","msg":"Add TimelineEntry success","success":true,"type":"ShareTimelineImpl","userId":526952388}""",
          "fields": {
            "HOSTNAME": "timeline11.server.163.org"
          },
          "userId": 526952388
        }
      },

网上针对这个问题的分析
[https://stackoverflow.com/questions/23150670/elasticsearch-match-vs-term-query]
修改请求体之后:

GET /lofter-exception-2019.04.30/_search
{"query": {
  "bool": {
    "must": [
            {
        "term": {
          "fields.HOSTNAME.keyword": "timeline111.server.163.org"
        }
      },
      {"term": {
        "userId": 526952388
      }},
      {
        "term": {
          "success": true
        }
      }
    ]
  }
}
, "_source": ["userId","body","fields.HOSTNAME"]
}

结果是符合预期的:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

如果使用ES的搜索过程中,发现加了过滤条件不生效,可以尝试以下方法:
1)条件字段是否有keyword,有的话,使用xxx.keyword

  1. match是分词匹配的,会将条件中的一句话切分为多个单词,只需其中一个单词匹配,就命中,然后根据Lucence的评分系统计算评分;而term是严格全句匹配的,但是有个条件:使用term要确定的这个字段是否“被分析”(analyzed),默认的字符串是被分析的。根据实际情况选择到底是match还是term。可以参照: https://www.jianshu.com/p/eb30eee13923

attention
ES中的查询操作分为2种:查询(query)和过滤(filter)。查询即是之前提到的query查询,它(查询)默认会计算每个返回文档的得分,然后根据得分排序。而过滤(filter)只会筛选出符合的文档,并不计算得分,且它可以缓存文档。所以,单从性能考虑,过滤比查询更快。
使用过滤语句得到的结果集 -- 一个简单的文档列表,快速匹配运算并存入内存是十分方便的, 每个文档仅需要1个字节。这些缓存的过滤结果集与后续请求的结合使用是非常高效的。
查询语句不仅要查找相匹配的文档,还需要计算每个文档的相关性,所以一般来说查询语句要比 过滤语句更耗时,并且查询结果也不可缓存。详细介绍可以参考:
https://doc.yonyoucloud.com/doc/mastering-elasticsearch/chapter-2/27_README.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356