小编典典

查询Elasticsearch JSON

elasticsearch

我试图查询elasticsearch以便找出使用某种产品购买了哪些产品。

我的数据从平面文件进入logstash。

 OrderNumber ProductName
    order1   Chicken    
    order2   Banana
    order3   Chicken   
    order1   Cucumber   
    order2   Chicken 
    order3   Apples
    order1   Flour
    order2   Rice
    order3   Nuts

如您在上面看到的,我有一个鸡肉的产品名称,它以 不同的订单号出现。

 OrderNumber ProductName
    order1   Chicken          
    order3   Chicken
    order2   Chicken

这就是我想要实现的目标:
步骤1:查找所有包含鸡肉的订单号

 OrderNumber ProductName
    order1   Chicken          
    order3   Chicken
    order2   Chicken

第2步:如果上述订单中有鸡肉,请给我购买的所有其他产品

结果:

     OrderNumber   ProductName
     order1        Cucumber
     order2        Banana
     order3        Apples
     order1        Flour
     order2        Rice
     order3        Nuts

到目前为止,这是我为Step1所做的尝试:

Query

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

Result

  "hits" : {
    "total" : 3,
    "max_score" : 11.378191,
    "hits" : [ {
      "_index" : "hello",
      "_type" : "logs",
      "_id" : "AVmxaChupyZuCjD89xPX",
      "_score" : 11.378191,
      "_source" : {
        "message" : "order1\Chicken\r",
        "path" : "C:\\utils\\Elk\\logstash\\bin\\product.log",
        "OrderNumber" : "order1",
        "ProductName" : "Chicken\r"
      }}, {
      "_index" : "hello",
      "_type" : "logs",
      "_id" : "AVmxaChupyZuCjD89xPX",
      "_score" : 11.378191,
      "_source" : {
        "message" : "order3\Chicken\r",
        "path" : "C:\\utils\\Elk\\logstash\\bin\\product.log",
        "OrderNumber" : "order3",
        "ProductName" : "Chicken\r"
      }
   }, {
      "_index" : "hello",
      "_type" : "logs",
      "_id" : "AVmxaChupyZuCjD89xPX",
      "_score" : 11.378191,
      "_source" : {
        "message" : "order2\Chicken\r",
        "path" : "C:\\utils\\Elk\\logstash\\bin\\product.log",
        "OrderNumber" : "order2",
        "ProductName" : "Chicken\r"
      }

我对如何完成步骤2感到非常困惑,因为我是Elasticsearch的新手,请帮忙?

Thanks


阅读 565

收藏
2020-06-22

共1个答案

小编典典

要搜索找到的订单号Chicken和商品名称不是的文档,Chicken可以使用以下查询:

{
  "query" : {
    "and" : [
       {
         "terms" : {
           "OrderNumber" : ["order1", "order2", "order3"]
         }
       },
       {
         "not" : {
           "term" : {
             "ProductName" : "Chicken"
           }
         }
       }
    ]
  }
}
2020-06-22