如何解决ElasticSearch 查询嵌套数组中的文档
我在弹性搜索索引中有一条记录:-
"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"
}
}
]
}
这里的类别数据是嵌套的。我正在尝试查询 categoryNumber 13 和 depNumber 98。我只想要带有 categoryNumber 13 和 depNumber 98 的 dict 对象
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,"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
}
}
]
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。