如何根据响应查询elasticsearch

How to query elasticsearch based on response

我正在尝试查询 elasticsearch 以执行以下操作:

数据进入 Elastic

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 的新手。

这个问题有很多不同的答案,它实际上归结为您想对这些数据执行的操作超出了您的要求。

不过,假设您只想获取包含特定产品的所有订单,我建议稍微更改一下索引结构。

您正在以非常 SQL 的方式索引数据。相反,您应该从文档或实体的角度来思考。在我看来,"order" 应该作为单个文档存在。它可能看起来像这样:

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

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

即一个订单就是一个文档,其中可以包含多个产品。这将允许您获取包含 "Chicken" 或其他任何内容的所有订单,但也允许您按订单号获取所有产品的列表。

同样,这在很大程度上取决于您打算如何使用您的数据,我要记住的主要事情是 elasticsearch 不是关系数据库。你必须多考虑一下你如何存储东西,因为你不能在查询时做复杂的连接。