我试图查询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很新。
答案 0 :(得分:1)
这个问题有很多不同的答案,它实际上取决于你想要对你所要求的数据做什么。
假设您要做的只是获取包含特定产品的所有订单,我建议稍微更改您的索引结构。
您正在以非常 SQL 的方式索引数据。相反,你应该考虑文件或实体。我认为这是一个"命令"应该作为单个文件存在。它看起来像这样:
"order": {
"properties": {
"orderNumber": {
"type": "string"
},
"product": {
"properties": {
"name": {
"type": "string"
}
}
}
}
}
也就是说,单个订单是一个文档,可以包含多个产品。这将允许您获得包含" Chicken"的所有订单。或其他任何东西,但也允许您通过orderNumber获得所有产品的列表。
这又取决于你打算如何使用你的数据,我要记住的主要事情是elasticsearch不是关系数据库。你必须多考虑如何存储事物,因为在查询时你不能像复杂的连接那样做。