问题的标题不能完全证明我的要求。我有一个表格形式的嵌套文档
{
"tags": [
{
"context": "context_pic_elements",
"name": "walls",
"created_at": 1542806972000,
"tag_id": 48,
"tagging_id": 1225
},
{
"context": "element",
"name": "solo",
"created_at": 1542806972000,
"tag_id": 47,
"tagging_id": 1226
},
{
"context": "end_use",
"name": "home renovation",
"created_at": 1542806972000,
"tag_id": 45,
"tagging_id": 1224
}
],
"name": "Wall patterns",
}
文档被映射为
{
"properties": {
"name": {
"type": "text"
},
"tags": {
"type": "nested",
"properties": {
"name": { "type": "keyword" },
"context": { "type": "keyword" },
"tag_id": { "type": "integer" }
}
}
}
}
我希望能够以
的形式查询图像images WHERE
(tags.context="context_pic_elements" AND tags.name="walls")
OR (tags.context="element" AND tags.name="solo")
我正在尝试的查询是
{
"query": {
"nested" : {
"path" : "tags",
"query": {
"bool": {
"should" : {
"bool": {
"must": [
{"term": {"tags.context": "context_pic_elements"}},
{"term": {"tags.name": "walls"}}
]
}
}
}
}
}
}
}
这使我可以查询AND子句的第一个条件。我在查询的第二个AND条件(弹性搜索不允许在其查询中使用多个must子句)的位置,以便我可以同时通过这两个条件进行查询。我看着elasticsearch bool query combine must with OR,但这不是我所需要的。
答案 0 :(得分:2)
由于嵌套文档是单独的文档,因此您需要以另一种方式进行操作,即OR两个嵌套子句而不是嵌套两个OR子句,它是这样的:
POST index/_search
{
"query": {
"bool": {
"should": [
{
"nested": {
"path": "tags",
"query": {
"bool": {
"must": [
{
"term": {
"tags.context": "context_pic_elements"
}
},
{
"term": {
"tags.name": "walls"
}
}
]
}
}
}
},
{
"nested": {
"path": "tags",
"query": {
"bool": {
"must": [
{
"term": {
"tags.context": "element"
}
},
{
"term": {
"tags.name": "solo"
}
}
]
}
}
}
}
]
}
}
}