ElasticSearch 查询嵌套数组中的文档
ElasticSearch Query documents in nested array
我在弹性搜索索引中有记录:-
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.0,
"hits" : [
{
"_index" : "index",
"_type" : "_doc",
"_id" : "C3wfF3kBVSP1PGuoao73",
"_score" : 0.0,
"_source" : {
"rId" : 1066,
“categoriesData" : [
{
"categoryNumber" : 13,
"depNumber : 98,
"storeIds" : [
"3",
"6"
],
"fData" : {
"Type" : “Single
}
},
{
"categoryNumber" : 12,
"depNumber" : 97,
"storeIds" : [
"3629",
"3628"
],
"Data" : {
"Type" : “DOUBLE
}
}
],
"sId" : "35EB8012-AA52-4872-A1A2-92522BD3925F"
}
}
]
}
这里的 categoriesData 是 nested.I 我正在尝试查询 categoryNumber 13 和 depNumber 98。我只想要 categoryNumber 13 和 depNumber 98 的字典对象
This is my query:-
GET /index/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "categoriesData",
"query": {
"bool": {
"must": [
{
"term": {
"categoriesData.categoryNumber": 13
}
},
{
"term": {
"categoriesData.depNumber": 98
}
}
]
}
}
}
}
]
}
}
}
当尝试上述查询时,它给了我所有的文件。我的要求是只获取带有 depNumber 和类别编号的文档
预期输出:- 嵌套字段中只有一个对象。
"categoriesData" : [
{
"categoryNumber" : 13,
"depNumber : 98,
"storeIds" : [
"3",
"6"
],
"fData" : {
"Type" : “Single
}
}
我的映射:-
{"mappings": {"properties":
{"rId": { "type": "integer"},
"sId": { "type": "keyword" },
"CategoriesData" : {"type":"nested","properties" :{"depnumber”: {"type":"integer"},"categoryNumber”: {"type":"integer"},"storeIds": {"type":"keyword"},"fData" : {"type":"object"}}}}}}
有什么方法可以编写查询以仅获取具有匹配项的特定对象
您可以使用 inner_hits
从嵌套文档中仅获取完全匹配的对象
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "categoriesData",
"query": {
"bool": {
"must": [
{
"term": {
"categoriesData.categoryNumber": 13
}
},
{
"term": {
"categoriesData.depNumber": 98
}
}
]
}
},
"inner_hits":{} // note this
}
}
]
}
}
}
我在弹性搜索索引中有记录:-
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.0,
"hits" : [
{
"_index" : "index",
"_type" : "_doc",
"_id" : "C3wfF3kBVSP1PGuoao73",
"_score" : 0.0,
"_source" : {
"rId" : 1066,
“categoriesData" : [
{
"categoryNumber" : 13,
"depNumber : 98,
"storeIds" : [
"3",
"6"
],
"fData" : {
"Type" : “Single
}
},
{
"categoryNumber" : 12,
"depNumber" : 97,
"storeIds" : [
"3629",
"3628"
],
"Data" : {
"Type" : “DOUBLE
}
}
],
"sId" : "35EB8012-AA52-4872-A1A2-92522BD3925F"
}
}
]
}
这里的 categoriesData 是 nested.I 我正在尝试查询 categoryNumber 13 和 depNumber 98。我只想要 categoryNumber 13 和 depNumber 98 的字典对象
This is my query:-
GET /index/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "categoriesData",
"query": {
"bool": {
"must": [
{
"term": {
"categoriesData.categoryNumber": 13
}
},
{
"term": {
"categoriesData.depNumber": 98
}
}
]
}
}
}
}
]
}
}
}
当尝试上述查询时,它给了我所有的文件。我的要求是只获取带有 depNumber 和类别编号的文档 预期输出:- 嵌套字段中只有一个对象。
"categoriesData" : [
{
"categoryNumber" : 13,
"depNumber : 98,
"storeIds" : [
"3",
"6"
],
"fData" : {
"Type" : “Single
}
}
我的映射:-
{"mappings": {"properties":
{"rId": { "type": "integer"},
"sId": { "type": "keyword" },
"CategoriesData" : {"type":"nested","properties" :{"depnumber”: {"type":"integer"},"categoryNumber”: {"type":"integer"},"storeIds": {"type":"keyword"},"fData" : {"type":"object"}}}}}}
有什么方法可以编写查询以仅获取具有匹配项的特定对象
您可以使用 inner_hits
从嵌套文档中仅获取完全匹配的对象
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "categoriesData",
"query": {
"bool": {
"must": [
{
"term": {
"categoriesData.categoryNumber": 13
}
},
{
"term": {
"categoriesData.depNumber": 98
}
}
]
}
},
"inner_hits":{} // note this
}
}
]
}
}
}