【问题标题】:Match exactly query in Kibana demo在 Kibana 演示中完全匹配查询
【发布时间】:2019-05-16 16:50:42
【问题描述】:

我正在测试 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"
            }
          }
        },

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

示例屏幕:

编辑:

我不是在寻找一些愚蠢的解决方案 - 一次有效。 我只想显示一个类别 - 但使用一个过滤器 - 不是一个过滤器,例如三个否定。如果我将我的类别更改为另一个类别 - 简单地说,我选择了“女鞋”,我只想显示该类别,只应用我从仪表板中选择的一个过滤器 - 而不是通过输入一些单词来定制过滤器。 我想进行可视化,当应用时显示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"
    }
}

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

【问题讨论】:

  • 您还看到了哪些其他类别?
  • @Archer 我添加了示例屏幕。例如,我只想看到Men's Accessories 而不是Men's Clothing(右下角的图表)。
  • 我忘了按apply - 我编辑了问题。

标签: elasticsearch kibana


【解决方案1】:

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

您可以像下面这样设置它:

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

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

更新答案:

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

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

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

【讨论】:

  • 我想拥有像以前一样的按钮并从中动态选择类别。我看到您正在制作静态可视化 - 您可以编辑您的答案以使其像问题中的那样动态吗?
  • 从技术上讲,您在顶部添加的过滤器是使其工作的方法。但在这种情况下,它不会像您期望的那样工作,因为订单有multiple categories。向下滚动到最后一个可视化,您可以看到文档本身包含两个类别,并且它与您过滤的类别相匹配:prnt.sc/noyig4。这是数据相关的。
  • @tryingHard 我更新了我的答案并添加了更多细节
  • 谢谢-我编辑了问题-我添加了带有全新类别的新索引(仅出现单独)-您当然是对的-这是由数据引起的。
【解决方案2】:

我就是这样解决的。我必须使用 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,它不会显示“不是”运算符。所以让我给你看一张“不是”运算符的图像。

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

现在我才意识到您只想查看男士配饰而不是男士服装。我的视力不好。但是,我希望你有一个粗略的想法。如果你愿意,我可以做男装。让我知道。顺便说一句,我试图只用一个过滤器来做,但不知何故,图表不起作用。

【讨论】:

  • 这不是解决方案。我只想显示一个 - 但有一个过滤器 - 不是一个过滤器和三个否定。如果我将我的类别更改为另一个 - 简单地说,我选择了“女鞋”,我只想显示该类别,只应用我选择的这个过滤器 from the dashboard - 而不是通过输入一些单词来定制过滤器。我想让visualization 在应用时显示excatly 一个类别。
  • "顺便说一句,我试着只用一个过滤器来做,但不知何故,图表不起作用。"主要问题是您需要从仪表板默认进行查询 - 可能不是短语。
猜你喜欢
  • 2014-11-01
  • 1970-01-01
  • 2021-04-06
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 2022-01-06
相关资源
最近更新 更多