小编典典

查询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" : {
        "match" : {
        "ProductName" : "Chicken"
}
    }
      }

结果

  "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的新手,请帮忙?

谢谢


阅读 265

收藏
2020-06-22

共1个答案

小编典典

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

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