我试图查询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并不陌生,请帮忙?
谢谢
最佳答案
要搜索具有Chicken
的订单号和Chicken
以外的产品名称的文档,可以使用以下查询:
{
"query" : {
"and" : [
{
"terms" : {
"OrderNumber" : ["order1", "order2", "order3"]
}
},
{
"not" : {
"term" : {
"ProductName" : "Chicken"
}
}
}
]
}
}
关于json - 查询Elasticsearch JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41806896/