对嵌套对象数组的 Elasticsearch 查询
Elasticsearch query on arrays of nested objects
我正在努力解决 ElasticSearch 上的查询问题。
我记录了这种对象:
{
"obj_id": 1,
"label": "label obj 1",
"array_of_nested": [{
"nested_id": 1,
"label": "label nested obj1"
}, {
"nested_id": 2,
"label": "label nested obj2"
}
]
}, {
"obj_id": 2,
"label": "label obj 2",
"array_of_nested": [{
"nested_id": 3,
"label": "label nested obj1"
}, {
"nested_id": 4,
"label": "label nested obj2"
}
]
}
我正在尝试编写一个查询来查找 array_of_nested 属性 中 nested_id 为 2 的所有对象,但到目前为止无法正常工作。 :/
谢谢!
在嵌套类型中,您需要在查询中定义 path
,您的查询将如下所示:
{
"query": {
"nested": {
"path": "array_of_nested",
"query": {
"term": {
"array_of_nested.nested_id": {
"value": "2"
}
}
}
}
}
}
你能试试这个吗?
{
"query": {
"match": {
"array_of_nested.nested_id": 2
}
}
}
添加带有 mapping
、example docs
和 working
搜索查询的工作示例。你需要使用 path param of nested field
映射
{
"mappings": {
"properties": {
"array_of_nested": {
"type": "nested"
},
"obj_id" :{
"type" : "text"
},
"label" :{
"type" : "text"
}
}
}
}
示例文档
{
"obj_id": 1,
"label": "label obj 1",
"array_of_nested": [
{
"nested_id": 1,
"label": "label nested obj1"
},
{
"nested_id": 2,
"label": "label nested obj2"
}
]
}
和第二个文档
{
"obj_id": 2,
"label": "label obj 2",
"array_of_nested": [
{
"nested_id": 3,
"label": "label nested obj1"
},
{
"nested_id": 4,
"label": "label nested obj2"
}
]
}
搜索查询
{
"query": {
"nested": {
"path": "array_of_nested",
"query": {
"term": {
"array_of_nested.nested_id": {
"value": "2"
}
}
}
}
}
}
以及您预期的搜索结果
"hits": [
{
"_index": "nestedobj",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"obj_id": 1,
"label": "label obj 1",
"array_of_nested": [
{
"nested_id": 1,
"label": "label nested obj1"
},
{
"nested_id": 2,
"label": "label nested obj2"
}
]
}
}
]
我正在努力解决 ElasticSearch 上的查询问题。 我记录了这种对象:
{
"obj_id": 1,
"label": "label obj 1",
"array_of_nested": [{
"nested_id": 1,
"label": "label nested obj1"
}, {
"nested_id": 2,
"label": "label nested obj2"
}
]
}, {
"obj_id": 2,
"label": "label obj 2",
"array_of_nested": [{
"nested_id": 3,
"label": "label nested obj1"
}, {
"nested_id": 4,
"label": "label nested obj2"
}
]
}
我正在尝试编写一个查询来查找 array_of_nested 属性 中 nested_id 为 2 的所有对象,但到目前为止无法正常工作。 :/
谢谢!
在嵌套类型中,您需要在查询中定义 path
,您的查询将如下所示:
{
"query": {
"nested": {
"path": "array_of_nested",
"query": {
"term": {
"array_of_nested.nested_id": {
"value": "2"
}
}
}
}
}
}
你能试试这个吗?
{
"query": {
"match": {
"array_of_nested.nested_id": 2
}
}
}
添加带有 mapping
、example docs
和 working
搜索查询的工作示例。你需要使用 path param of nested field
映射
{
"mappings": {
"properties": {
"array_of_nested": {
"type": "nested"
},
"obj_id" :{
"type" : "text"
},
"label" :{
"type" : "text"
}
}
}
}
示例文档
{
"obj_id": 1,
"label": "label obj 1",
"array_of_nested": [
{
"nested_id": 1,
"label": "label nested obj1"
},
{
"nested_id": 2,
"label": "label nested obj2"
}
]
}
和第二个文档
{
"obj_id": 2,
"label": "label obj 2",
"array_of_nested": [
{
"nested_id": 3,
"label": "label nested obj1"
},
{
"nested_id": 4,
"label": "label nested obj2"
}
]
}
搜索查询
{
"query": {
"nested": {
"path": "array_of_nested",
"query": {
"term": {
"array_of_nested.nested_id": {
"value": "2"
}
}
}
}
}
}
以及您预期的搜索结果
"hits": [
{
"_index": "nestedobj",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"obj_id": 1,
"label": "label obj 1",
"array_of_nested": [
{
"nested_id": 1,
"label": "label nested obj1"
},
{
"nested_id": 2,
"label": "label nested obj2"
}
]
}
}
]