结合 should(布尔 OR)和嵌套文档检索的弹性查询
Elastic query combining should (boolean OR) with retrieval of nested documents
我有一个包含嵌套文档的弹性索引。我正在尝试通过 id 检索多个文档及其嵌套文档。使用 Should 查询检索文档本身非常简单,但是我应该在哪里以及如何在其中包含嵌套的文档查询?
布尔“应该”查询:
GET myIndex/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"id": "123"
}
},
{
"term": {
"id": "456"
}
},
{
"term": {
"id": "789"
}
}
]
}
}
}
检索嵌套文档的查询:
"nested": {
"path": "myNestedDocs",
"query": {
"match_all": {}
}
不可能将嵌套查询添加到每个术语查询中,因为这会产生解析异常:“[term] 格式错误的查询,预计 [END_OBJECT] 但发现 [FIELD_NAME] “
此外,不可能将嵌套的文档查询添加到与术语查询相同的级别,因为那样它会被视为只是另一个 OR 子句并简单地从索引中检索所有文档。
有什么想法吗?谢谢!
据我了解,您想要匹配列表中的任何一个 id
并检索嵌套文档。如果我的理解正确,那么您需要将查询合并到 must
子句,如下所示:
{
"query": {
"bool": {
"must": [
{
"terms": {
"id": [
"123",
"456",
"789"
]
}
},
{
"nested": {
"path": "myNestedDocs",
"query": {
"match_all": {}
}
}
}
]
}
}
}
我有一个包含嵌套文档的弹性索引。我正在尝试通过 id 检索多个文档及其嵌套文档。使用 Should 查询检索文档本身非常简单,但是我应该在哪里以及如何在其中包含嵌套的文档查询?
布尔“应该”查询:
GET myIndex/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"id": "123"
}
},
{
"term": {
"id": "456"
}
},
{
"term": {
"id": "789"
}
}
]
}
}
}
检索嵌套文档的查询:
"nested": {
"path": "myNestedDocs",
"query": {
"match_all": {}
}
不可能将嵌套查询添加到每个术语查询中,因为这会产生解析异常:“[term] 格式错误的查询,预计 [END_OBJECT] 但发现 [FIELD_NAME] “
此外,不可能将嵌套的文档查询添加到与术语查询相同的级别,因为那样它会被视为只是另一个 OR 子句并简单地从索引中检索所有文档。
有什么想法吗?谢谢!
据我了解,您想要匹配列表中的任何一个 id
并检索嵌套文档。如果我的理解正确,那么您需要将查询合并到 must
子句,如下所示:
{
"query": {
"bool": {
"must": [
{
"terms": {
"id": [
"123",
"456",
"789"
]
}
},
{
"nested": {
"path": "myNestedDocs",
"query": {
"match_all": {}
}
}
}
]
}
}
}