如何根据响应

时间:2017-01-24 14:04:11

标签: json elasticsearch elastic-stack logstash-grok

我试图查询elasticsearch以执行以下操作:

数据进入弹性

Order Number    Product Name
order1          Chicken    
order2          Banana
order3          Chicken   
order1          Cucumber   
order2          Chicken
order3          Apples
order1          Flour
order2          Rice
order3          Nuts

这是用于获取产品名称的查询

{
    "query" : {
        "match" : {
        "ProductName" : "Chicken"
}

结果:所有包含鸡的订单

    Order Number    Product Name
    order1          Chicken          
    order3          Chicken
    order2          Chicken

我想要实现的目标:
如果以上订单中有鸡肉,那么就给我所有其他产品也是用鸡肉购买的。

Order Number    Product Name
order1          Cucumber
order2          Banana
order3          Apples
order1          Flour
order2          Rice
order3          Nuts

如何构建查询来执行此操作?请帮助我对elasticsearch很新。

  • 我是否需要运行第一个查询获取包含Chicken的所有订单然后提取订单号并运行另一个查询?

1 个答案:

答案 0 :(得分:1)

这个问题有很多不同的答案,它实际上取决于你想要对你所要求的数据做什么。

假设您要做的只是获取包含特定产品的所有订单,我建议稍微更改您的索引结构。

您正在以非常 SQL 的方式索引数据。相反,你应该考虑文件或实体。我认为这是一个"命令"应该作为单个文件存在。它看起来像这样:

 "order": {
        "properties": {
         "orderNumber": {
           "type": "string"
          },
          "product": {

            "properties": {
              "name": {
                "type": "string"
                }
            }
          }
       }
    }

也就是说,单个订单是一个文档,可以包含多个产品。这将允许您获得包含" Chicken"的所有订单。或其他任何东西,但也允许您通过orderNumber获得所有产品的列表。

这又取决于你打算如何使用你的数据,我要记住的主要事情是elasticsearch不是关系数据库。你必须多考虑如何存储事物,因为在查询时你不能像复杂的连接那样做。