elasticsearch 在Kibana演示中精确匹配查询,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch 在Kibana演示中精确匹配查询,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch 在Kibana演示中精确匹配查询

elasticsearch 在Kibana演示中精确匹配查询,elasticsearch,kibana,elasticsearch,Kibana,我正在测试Kibana的默认演示:仪表板[电子商务]收入仪表板。 当我从[eCommerce]控件中筛选时,例如,将类别设置为男装配件,我会在[eCommerce]销售分类中看到其他类别。我怎样才能改变这一点 我看到查询是这样构建的: { "query": { "match": { "category.keyword": { "query": "Men's Accessories", "type": "phrase" }

我正在测试Kibana的默认演示:
仪表板[电子商务]收入仪表板
。 当我从
[eCommerce]控件中筛选时,例如,将类别设置为
男装配件
,我会在
[eCommerce]销售分类中看到其他类别。我怎样才能改变这一点

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

{
  "query": {
    "match": {
      "category.keyword": {
        "query": "Men's Accessories",
        "type": "phrase"
      }
    }
  }
}
因此,这意味着:

 "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "category.keyword": {
              "query": "Men's Accessories"
            }
          }
        },
如何更改此演示以准确显示我选择的类别

示例屏幕:

编辑:

{
"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 Accessories",
         "type": "phrase"
       }
      }
    }
  }
我不是在寻找一些愚蠢的解决办法——那只会奏效一次。 我只想显示一个类别-但有一个过滤器-而不是一个过滤器,例如三个否定。如果我将我的类别更改为另一个-简单地说,我选择了“女式鞋”,我只想通过应用我从仪表板中选择的这一个过滤器来显示该类别-而不是通过键入一些单词来显示一些定制的过滤器。 我想让可视化显示,当应用时,会显示一个类别,而不是像现在这样的4个类别

编辑: 我在Kibana
Dev Tools
一节中创建了两个文档(使用全新的
男士测试新类别
):

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 Accessories",
         "type": "phrase"
       }
      }
    }
  }
第二个过滤器:

{
"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 Accessories",
         "type": "phrase"
       }
      }
    }
  }
第三个过滤器:

{
    "query": {
       "match": {
          "category.keyword": {
             "query": "Men's Shoes",
             "type": "phrase"
             }
           }
         }
       }
第四个过滤器:

{
"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 Accessories",
         "type": "phrase"
       }
      }
    }
  }
我不知道为什么,但如果我将查询视为DSL,它不会显示“is not”运算符。因此,让我向您显示“is not”运算符的图像

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


现在我才意识到你只想看男人的配饰而不是男人的衣服。我的视力很差。不过,我希望你能大致了解一下。如果你愿意,我可以做男装。让我知道。顺便说一句,我试着只用一个过滤器,但不知怎的,这个图不起作用

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

您可以按如下方式进行设置:

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

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

更新答案:

{
"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 Accessories",
         "type": "phrase"
       }
      }
    }
  }
演示是限制性的,您不能更改数据或使用分析器。但实际上,您可以通过精确匹配所需的值过滤掉数组,然后应用过滤器

现在,如果您使用kibana中的开发工具过滤数组,您将看到它返回与您的类别匹配的所有文档-它可能有也可能没有额外的类别,但它始终会包含您要查找的内容

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


您还看到了哪些类别?@Archer我添加了示例屏幕。我只想看
男士配饰
而不是
男士服装
(例如,右下角的图表)。我忘了按
应用
-我编辑了这个问题。这不是一个解决方案。我只想显示一个-但有一个过滤器-而不是一个过滤器和三个否定。如果我将我的类别更改为另一个类别-简单地说,我选择了“女式鞋”,我只想通过应用我从仪表板中选择的这一个过滤器来显示该类别-而不是通过键入一些单词来显示一些定制的过滤器。我想让
可视化
在应用时显示一个类别。“顺便说一句,我试着只用一个过滤器,但不知怎的,图形无法工作。”这里的主要问题是,您需要在默认情况下从仪表板进行查询-可能不是作为一个短语。我希望像以前一样使用按钮,并从中动态选择类别。我看到你在做静态可视化-你能编辑你的答案使其像问题中的一样动态吗?从技术上讲,你在顶部添加的过滤器是使其工作的方法。但是在这种情况下,它不会像您期望的那样工作,因为订单有多个类别。向下滚动到最后一个可视化,您可以看到文档本身包含两个类别,并且它与您从中筛选的类别相匹配:。这与数据有关。@tryingHard我更新了我的答案并添加了更多的细节hanks-我编辑了问题-我添加了新的索引和全新的类别(仅单独出现)-你当然是对的-这是由数据引起的。