在 Kibana 演示中完全匹配查询

Match exactly query in Kibana demo

我正在测试 Kibana 的默认演示:Dashboard [eCommerce] Revenue Dashboard。 当我从 [eCommerce] Controls 过滤时,例如,将类别设置为 Men's Accessories,我在 [eCommerce] Sales by Category 上看到其他类别。我该如何改变它?

我看到查询是这样构建的:

{
  "query": {
    "match": {
      "category.keyword": {
        "query": "Men's Accessories",
        "type": "phrase"
      }
    }
  }
}

所以这转化为:

 "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "category.keyword": {
              "query": "Men's Accessories"
            }
          }
        },

如何更改此演示以准确显示我选择的类别?

示例屏幕:

编辑:

我不是在寻找一些愚蠢的解决方案 - 一次性有效。 我只想显示一个类别 - 但有一个过滤器 - 而不是一个过滤器,例如三个否定。如果我将我的类别更改为另一个 - 简单地说,我选择 "women's shoes" 我只想显示该类别,只应用我从仪表板中选择的这个过滤器 - 而不是通过键入一些词来定制过滤器。 我想进行可视化,应用时显示 excatly 一个类别 - 而不是现在的 4 个类别。

编辑: 我在 Kibana Dev Tools 部分创建了两个文档(带有全新的 Men's TEST_NEW_CATEGORY):

POST kibana_sample_data_ecommerce/_doc/
{
    "category": [
      "Men's TEST_NEW_CATEGORY"
    ],
    "currency": "EUR",
    "customer_first_name": "Youssef",
    "customer_full_name": "Youssef Jensen",
    "customer_gender": "MALE",
    "customer_id": 31,
    "customer_last_name": "Jensen",
    "customer_phone": "",
    "day_of_week": "Saturday",
    "day_of_week_i": 5,
    "email": "youssef@jensen-family.zzz",
    "manufacturer": [
      "Low Tide Media"
    ],
    "order_date": "2019-05-15T23:45:36+00:00",
    "order_id": 592109,
    "products": [
      {
        "base_price": 49.99,
        "discount_percentage": 0,
        "quantity": 1,
        "manufacturer": "Low Tide Media",
        "tax_amount": 0,
        "product_id": 12202,
        "category": "Men's TEST_NEW_CATEGORY",
        "sku": "ZO0396603966",
        "taxless_price": 49.99,
        "unit_discount_amount": 0,
        "min_price": 26.49,
        "_id": "sold_product_592109_12202",
        "discount_amount": 0,
        "created_on": "2016-12-31T23:45:36+00:00",
        "product_name": "Moccasins - stone",
        "price": 49.99,
        "taxful_price": 49.99,
        "base_unit_price": 49.99
      },
      {
        "base_price": 28.99,
        "discount_percentage": 0,
        "quantity": 1,
        "manufacturer": "Low Tide Media",
        "tax_amount": 0,
        "product_id": 15017,
        "category": "Men's Clothing",
        "sku": "ZO0452704527",
        "taxless_price": 28.99,
        "unit_discount_amount": 0,
        "min_price": 13.63,
        "_id": "sold_product_592109_15017",
        "discount_amount": 0,
        "created_on": "2016-12-31T23:45:36+00:00",
        "product_name": "Jumper - off-white",
        "price": 28.99,
        "taxful_price": 28.99,
        "base_unit_price": 28.99
      }
    ],
    "sku": [
      "ZO0396603966",
      "ZO0452704527"
    ],
    "taxful_total_price": 78.98,
    "taxless_total_price": 78.98,
    "total_quantity": 2,
    "total_unique_products": 2,
    "type": "order",
    "user": "youssef",
    "geoip": {
      "country_iso_code": "US",
      "location": {
        "lon": -74,
        "lat": 40.8
      },
      "region_name": "New York",
      "continent_name": "North America",
      "city_name": "New York"
    }
}

然后我清楚地看到使用标准过滤器按钮时只有一个类别:

我就是这样解决的。我不得不使用 4 个过滤器才能看到男士服装。

图片可能太小了,看不出来,我写下来。

第一个过滤器:

{
"query": {
  "match": {
    "category.keyword": {
       "query": "Men's Clothing",
        "type": "phrase"
    }
   }
  }
 }

第二个过滤器:

{
   "query": {
     "match": {
       "category.keyword": {
          "query": "Women's Accessories",
          "type": "phrase"
        }
       }
      }
     }

第三个过滤器:

{
    "query": {
       "match": {
          "category.keyword": {
             "query": "Men's Shoes",
             "type": "phrase"
             }
           }
         }
       }

第四个过滤器:

{
   "query": {
     "match": {
     "category.keyword": {
        "query": "Men's Accessories",
         "type": "phrase"
       }
      }
    }
  }

我不知道为什么,但如果我将查询视为 DSL,它不会显示 "is not" 运算符。 让我给你看一张 "is not" 运算符。

然后,您将看到所有仪表板只有一个类别,如下所示。

现在我才意识到你只想看男装而不是男装。我的视力不好。但是,我希望你有一个大概的想法。如果你愿意,我可以做男装。让我知道。顺便说一句,我试着只用一个过滤器来做,但不知怎么的,图表不起作用。

如果您想按特定类别进行过滤,您需要使用 filter 而不是 terms。术语聚合将应用于该字段中的所有值。另外,请注意我使用切换禁用了术语聚合。对于您提到的用例,我仅使用 过滤器

您可以像下面这样设置:

您还可以添加多个过滤器,如下所示:

另一种选择是添加 scripted field 并在这些脚本字段上可视化,但这种情况非常简单,即从一个字段开始,因此不需要这样做。但是,在整理来自多个字段的数据时 - 脚本化字段可能很有用。

更新答案:

该演示是有限制的,您不能更改数据或使用分析器。但实际上你可以通过精确匹配你想要的值来过滤掉一个数组,然后应用过滤器。

目前,如果您使用 kibana 中的开发工具过滤数组,您将看到它 returns 所有与您的类别匹配的文档 - 它可能有也可能没有额外的类别,但它总是有您想要的正在找。

因此,当您添加过滤器时,您仍然会在可视化中看到其他类别,因为数据就是这样。