代码之家  ›  专栏  ›  技术社区  ›  duong_dajgja

为什么elasticsearch在不同的索引上为同一个查询返回太不同的结果?

  •  0
  • duong_dajgja  · 技术社区  · 6 年前

    我首先使用Elasticsearch和Kibana,所以请保持冷静回答我的问题!

    我得到了一个已经有一个索引叫做 dai-* ad-prior . 然后,我继续向这两个指数提供如下数据:

    {'obj_id': 'UHDRXEWEEK', 'event_type': 'PREC_AD_STARTED', 'event_id': '5c6b584373d', 'timestamp': 1550540223736L, 'channel_id': '123456789'}
    {'obj_id': 'FDREJJSSHE', 'event_type': 'PREC_AD_STARTED', 'event_id': '4f53jhabd24', 'timestamp': 1550540225872L, 'channel_id': '123456789'}
    

    event_type.keyword:PREC_AD_STARTED
    event_type:PREC_AD_STARTED
    event_type:'PREC_AD_STARTED'
    

    索引 戴-* 367 hits .

    索引 :以上搜索返回了不同的结果: event_type:PREC_AD_STARTED 返回 8 hits 但是另外两个人回来了 0 hits

    为什么上面的搜索返回相同的结果 戴-* 返回的结果不同 事先通知 ?

    更新

    为了回答@Nishant Saini的评论,我抓取了我假设的映射 event_type

    戴-* :

    "event_type": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        }
      }
    }
    

    事先通知

    "event_type": {
      "type": "keyword",
      "ignore_above": 1024
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Community CDub    4 年前

    案例1: event_type.keyword:PREC_AD_STARTED

    在索引中 dia-* 财产 event_type 有一个 sub-field 命名 keyword . 上述查询引用此子字段,即。 event_type.keyword . 为了比赛 dai-* 返回文档,而字段不存在此子字段 事件类型 在索引中 ad-prior 因此没有结果。

    event_type:PREC_AD_STARTED

    两个索引中都存在事件类型。即使在索引中 戴-* 数据类型为 text 因为在默认情况下,标准分析仪应用于此 PREC_AD_STARTED 会导致 prec_ad_started . 上面的查询将同一个分析器应用于输入字符串,然后该字符串也转换为 因此与文档匹配。

    如果是索引 事先通知 事件类型 关键字

    因此,在这两个索引的情况下,这个查询会给出结果。

    案例3: event_type:'PREC_AD_STARTED'

    对于索引 戴-* 因为查询在字段上 文本 已编制索引获取索引的值为 prec_ad_启动 standard analyzer 'PREC_AD_STARTED' (单引号)。即使这个字符串也将通过标准分析器传递,它也将转换为 prec_ad_启动 因此这个查询匹配。

    事先通知 事件类型 类型 ,这意味着索引没有任何修改。因为我们在现场查询 事件类型 查询将不应用分析器(因为数据类型为 keyword '预演开始' (不是 )因此没有匹配。