带日期范围的嵌套查询
Nested Query with Date Range
我想知道是否有人可以确认我构造的查询是否正确。
我有一个 User
映射,其中 Transaction
嵌套在用户中,我正在寻找在某个日期之前购买了特定项目的用户。此外,在 Transaction
中我还有 line_items
这也是一个嵌套字段。
最初,我构建了以下查询,根据返回的数据,我断定查询可能不正确。
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "transaction",
"query": {
"nested": {
"path": "transaction.line_items",
"query": {
"bool": {
"must": {
"match": {
"transaction.line_items.barcode": {
"query": "abc123xyz"
}
}
}
}
}
}
}
}
},
{
"nested": {
"path": "transaction",
"query": {
"range": {
"transaction.timestamp": {
"from": null,
"include_lower": true,
"include_upper": true,
"to": "2021-05-14T00:00:00+02:00"
}
}
}
}
}
]
}
}
}
然后我更新了查询,现在根据返回的结果,我 认为 查询是正确的。但是,为了避免确认偏差,我想知道是否有人可以解释为什么第二个查询是正确的(假设是正确的)。
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "transaction",
"query": {
"bool": {
"must": [
{
"range": {
"transaction.timestamp": {
"from": null,
"include_lower": true,
"include_upper": true,
"to": "2021-05-16T00:00:00+02:00"
}
}
},
{
"nested": {
"path": "transaction.line_items",
"query": {
"bool": {
"must": {
"match": {
"transaction.line_items.barcode": {
"query": "abc123xyz"
}
}
}
}
}
}
}
]
}
}
}
}
]
}
}
}
ES 中的每个嵌套文档都存储为单独的文档。
假设你有一个文档-
A - [b,d] 作为嵌套字段
如果根据您的第一次尝试->日期查询只匹配d,条形码查询只匹配b。然后返回A。
但是对于您的第二次尝试,两个查询都必须匹配同一个嵌套文档,并且基于此仅返回文档。在我们的例子中。第一次尝试不会返回 A。
我想知道是否有人可以确认我构造的查询是否正确。
我有一个 User
映射,其中 Transaction
嵌套在用户中,我正在寻找在某个日期之前购买了特定项目的用户。此外,在 Transaction
中我还有 line_items
这也是一个嵌套字段。
最初,我构建了以下查询,根据返回的数据,我断定查询可能不正确。
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "transaction",
"query": {
"nested": {
"path": "transaction.line_items",
"query": {
"bool": {
"must": {
"match": {
"transaction.line_items.barcode": {
"query": "abc123xyz"
}
}
}
}
}
}
}
}
},
{
"nested": {
"path": "transaction",
"query": {
"range": {
"transaction.timestamp": {
"from": null,
"include_lower": true,
"include_upper": true,
"to": "2021-05-14T00:00:00+02:00"
}
}
}
}
}
]
}
}
}
然后我更新了查询,现在根据返回的结果,我 认为 查询是正确的。但是,为了避免确认偏差,我想知道是否有人可以解释为什么第二个查询是正确的(假设是正确的)。
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "transaction",
"query": {
"bool": {
"must": [
{
"range": {
"transaction.timestamp": {
"from": null,
"include_lower": true,
"include_upper": true,
"to": "2021-05-16T00:00:00+02:00"
}
}
},
{
"nested": {
"path": "transaction.line_items",
"query": {
"bool": {
"must": {
"match": {
"transaction.line_items.barcode": {
"query": "abc123xyz"
}
}
}
}
}
}
}
]
}
}
}
}
]
}
}
}
ES 中的每个嵌套文档都存储为单独的文档。
假设你有一个文档- A - [b,d] 作为嵌套字段
如果根据您的第一次尝试->日期查询只匹配d,条形码查询只匹配b。然后返回A。
但是对于您的第二次尝试,两个查询都必须匹配同一个嵌套文档,并且基于此仅返回文档。在我们的例子中。第一次尝试不会返回 A。