如何根据响应查询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 的新手。
- 我是否需要 运行 第一个查询获取所有包含 Chicken 的订单,然后提取订单号并 运行 另一个查询?
这个问题有很多不同的答案,它实际上归结为您想对这些数据执行的操作超出了您的要求。
不过,假设您只想获取包含特定产品的所有订单,我建议稍微更改一下索引结构。
您正在以非常 SQL 的方式索引数据。相反,您应该从文档或实体的角度来思考。在我看来,"order" 应该作为单个文档存在。它可能看起来像这样:
"order": {
"properties": {
"orderNumber": {
"type": "string"
},
"product": {
"properties": {
"name": {
"type": "string"
}
}
}
}
}
即一个订单就是一个文档,其中可以包含多个产品。这将允许您获取包含 "Chicken" 或其他任何内容的所有订单,但也允许您按订单号获取所有产品的列表。
同样,这在很大程度上取决于您打算如何使用您的数据,我要记住的主要事情是 elasticsearch 不是关系数据库。你必须多考虑一下你如何存储东西,因为你不能在查询时做复杂的连接。
我正在尝试查询 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 的新手。
- 我是否需要 运行 第一个查询获取所有包含 Chicken 的订单,然后提取订单号并 运行 另一个查询?
这个问题有很多不同的答案,它实际上归结为您想对这些数据执行的操作超出了您的要求。
不过,假设您只想获取包含特定产品的所有订单,我建议稍微更改一下索引结构。
您正在以非常 SQL 的方式索引数据。相反,您应该从文档或实体的角度来思考。在我看来,"order" 应该作为单个文档存在。它可能看起来像这样:
"order": {
"properties": {
"orderNumber": {
"type": "string"
},
"product": {
"properties": {
"name": {
"type": "string"
}
}
}
}
}
即一个订单就是一个文档,其中可以包含多个产品。这将允许您获取包含 "Chicken" 或其他任何内容的所有订单,但也允许您按订单号获取所有产品的列表。
同样,这在很大程度上取决于您打算如何使用您的数据,我要记住的主要事情是 elasticsearch 不是关系数据库。你必须多考虑一下你如何存储东西,因为你不能在查询时做复杂的连接。