首页 > 解决方案 > 通过 Elasticserach Query DSL 在 Kibana 中查找列表中的所有条目

问题描述

你能帮我解决这个问题吗?“发现”中的我的 Kibana 数据库包含交易列表。我知道想在这个数据库中找到所有在特定工具(ISIN 编号)中完成的交易。当我手动添加过滤器并切换到 Elasticserach Query DSL 时,我发现以下内容:

{
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "obdetails.isin": "CH0253592783"
          }
        },
        {
          "match_phrase": {
            "obdetails.isin": "CH0315622966"
          }
        },
        {
          "match_phrase": {
            "obdetails.isin": "CH0357659488"
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

由于我想检查数据库中超过 200 个 ISINS,这似乎效率低下。有没有一种方法,我可以说“如果它包含以下 200 个 ISIN 之一,请告诉我交易?”。

我已经用谷歌搜索并尝试了这个,但没有奏效:

{
  "query": {
    "terms": {
      "obdetails.isin": [ "CH0357659488", "CH0315622966"],
      "boost": 1.0
    }
  }
}

查询有效,但不显示任何结果。

标签: elasticsearchkibanaelasticsearch-dsl

解决方案


总结。分析一个类型的字段,text它基本上使用给定的分析器等将给定的数据转换为术语列表,而不是单个术语。给定的行为会导致术语查询与这些值不匹配。

可以添加一个额外的 type 字段,而不是更改字段的类型keyword。这样,可以执行术语查询,同时仍然具有在字段上匹配的能力。

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

obdetails.isin.keyword上面的示例将添加一个称为可用于术语的额外字段。虽然仍然能够使用匹配查询obdetails.isin


推荐阅读