【问题标题】:Discovery page - can’t find in search bar but can find in filter发现页面 - 在搜索栏中找不到,但可以在过滤器中找到
【发布时间】:2019-12-26 21:27:49
【问题描述】:

我有 7.5.0 ELK 堆栈。并且看到很奇怪的情况。我有“消息”字段的索引,例如其中的这一行:

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

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

但如果我在搜索栏下添加过滤器“消息为 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"
    }
  }
},

搜索成功

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

【问题讨论】:

  • 请分享您的映射
  • 这里是消息字段的映射:"message": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } },

标签: elasticsearch kibana


【解决方案1】:
  1. 您的示例文档中没有 message 字段,我假设我们在谈论 comgId
  2. 新的 Kibana 查询语言 (KQL) 对数据类型更加挑剔。搜索 comgId: 1773182151883136235 未找到任何内容,但将其更改为 comgId: "1773182151883136235"(注意双引号)按预期工作。

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

【讨论】:

  • 1.我有“文本”类型的“消息”字段,该字段有字符串“[comgId:1773182151883136235;expired:.........”,所以这个字符串由标记“comgId”、“1773182151883136235”、 expited", .... 2. 是的,你说得对,双引号有帮助,一切都按预期进行。你能告诉我在哪里可以更详细地了解这种行为吗?
  • 我不确定文档是否完美,但elastic.co/guide/en/kibana/7.5/kuery-query.html 可能是最好的起点;其中有一个关于短语的引用字符串的部分,但实际上并没有处理不同的数据类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2020-12-08
  • 1970-01-01
  • 2020-06-29
  • 2020-08-04
相关资源
最近更新 更多