ElasticSearch 查询将嵌套数据作为响应,但如果嵌套字段不存在则不过滤数据
ElasticSearch query to bring nested data in response but not filter data if nested field does not exist
我在某些文档中嵌套了数据,而在某些文档中则没有。假设下面是映射。
{
"mappings": {
"item": {
"properties": {
"id": {
"type": "string"
},
"nestedType": {
"type": "nested",
"properties": {
"item1": {
"type": "long"
},
"item2": {
"type": "string"
}
}
}
}
}
}
}
我想基于 id 查询,并希望嵌套元素包含在我的响应中,其中 item1 = 1234。但我不想过滤响应。如果 item1 != 1234 或 item1 不存在。
实际上,我不希望嵌套查询影响我的点击结果。但如果匹配发现其他没有结果在内命中,则包括内命中。
您可以尝试以下查询。只有当结果存在时,才会在 inner_hits
中获取结果。
{
"query": {
"bool": {
"must": [
{
"term": {
"id": "idValue"
}
}
],
"should": [
{
"nested": {
"path": "nestedType",
"query": {
"match": {
"item2": "item2Value"
}
},
"inner_hits": {}
}
}
]
}
}
}
我在某些文档中嵌套了数据,而在某些文档中则没有。假设下面是映射。
{
"mappings": {
"item": {
"properties": {
"id": {
"type": "string"
},
"nestedType": {
"type": "nested",
"properties": {
"item1": {
"type": "long"
},
"item2": {
"type": "string"
}
}
}
}
}
}
}
我想基于 id 查询,并希望嵌套元素包含在我的响应中,其中 item1 = 1234。但我不想过滤响应。如果 item1 != 1234 或 item1 不存在。
实际上,我不希望嵌套查询影响我的点击结果。但如果匹配发现其他没有结果在内命中,则包括内命中。
您可以尝试以下查询。只有当结果存在时,才会在 inner_hits
中获取结果。
{
"query": {
"bool": {
"must": [
{
"term": {
"id": "idValue"
}
}
],
"should": [
{
"nested": {
"path": "nestedType",
"query": {
"match": {
"item2": "item2Value"
}
},
"inner_hits": {}
}
}
]
}
}
}