我正在设计一个新的索引,并且我的数据中有一些结构,可能会给搜索带来麻烦。
给出文档类型“目录”(将其转换为更通用的设置)
具有以下数据结构
{
"_id": 1,
"categories": [
{
"category_name": "aaaa",
"nb_items": 6
},
{
"category_name": "bbbb",
"nb_items": 5
}
]
},
{
"_id": 2,
"categories": [
{
"category_name": "cccc",
"nb_items": 9
},
{
"category_name": "bbbb",
"nb_items": 2
}
]
}
如何查询所有类别(nb_items按category_names之和)的项目数> 10但类别bbbb中的nb_items> 4的文档,仅检索第一个文档?
使用两个独立的列表类别和nb_items或使用此类嵌套文档会更容易吗?
答案 0 :(得分:0)
这部充满灵魂的作品。您可以使用过滤器部分中的脚本来设置总的nb条件,但这确实很慢。
{
"size": 0,
"query" : {
"nested" : {
"path" : "categories",
"query" : {
"bool" : {
"must" : [
{
"term" : {"categories.origin" : "bbbb"}
},
{
"range" : {"categories.nb_items" : {"gt" : 4}}
}
]}
}
}
},
"aggregations": {
"totalnbbydoc": {
"terms": {
"field": "youriddoc",
"size": 10000
},
"aggregations": {
"totalByNested": {
"nested": {
"path": "categories"
},
"aggregations": {
"nbtotal": {
"sum": {
"field": "categories.nb_items"
}
}
}
},
"paidAmount_filter": {
"bucket_selector": {
"script": {
"inline": "params.totalnbbydoc > 10"
},
"buckets_path": {
"totalnbbydoc": "totalByNested>nbtotal"
}
}
}
}
}
}
}