发现页-在搜索栏中找不到,但可以在过滤器中找到

时间:2019-12-25 10:59:34

标签: elasticsearch kibana

我有7.5.0 ELK堆栈。并看到非常奇怪的情况。我有“邮件”字段的索引,例如其中的这一行:

[comgId:1773182151883136235;expired:false;delivered:true;secured:false;querySecured:true]

当我查询“ message:1773182151883136235”时,它什么也没找到(来自Kibana的Discovery页面)

但是如果我在搜索栏“ message is 1773182151883136235”下添加过滤器:

{
  "query": {
    "match": {
      "message": {
        "query": "1773182151883136235",
        "type": "phrase"
      }
    }
  }
}

elastic查找该字符串。为什么?

在检查两个查询时,我看到在“查询”->“布尔”->“过滤器”:数组中传递了搜索参数。 但是当我在搜索栏中进行查询时-/ index / _search请求具有:

  "bool": {
    "should": [
      {
        "match": {
          "message": 1773182151883136300
        }
      }
    ],
    "minimum_should_match": 1
  }

一无所获,但添加了过滤器-/ index / _search请求具有:

{
  "match_phrase": {
    "message": {
      "query": "1773182151883136235"
    }
  }
},

搜索成功

为了使用户更方便地在熟悉的搜索栏中编写搜索查询,而无需创建过滤器。为什么会发生-这是错误还是正常行为?

1 个答案:

答案 0 :(得分:1)

  1. 示例文档中没有message字段,我假设我们正在谈论comgId
  2. 新的Kibana查询语言(KQL)在数据类型方面有点挑剔。搜索comgId: 1773182151883136235找不到任何内容,但是将其更改为comgId: "1773182151883136235"(请注意双引号)可以正常工作。

PS:切换到带双引号和不带双引号的Lucene查询语法都可以。