elasticsearch - 搜索整数的聚合列表 Elasticsearch
问题描述
我正在设计一个新索引,并且我的数据中有一些结构可能会给搜索带来一些麻烦。
给定一个文档类型“目录”(将其转换为更通用的设置)
具有以下数据结构,
{
"_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 总和)> 10 但类别 bbbb 中的 nb_items > 4 的文档以仅检索第一个文档?
使用两个独立的列表类别和 nb_items 或使用这样的嵌套文档会更容易吗?
解决方案
这件有灵魂的作品。您可以在过滤器部分使用脚本制作总 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"
}
}
}
}
}
}
}
推荐阅读
- c - 未声明的 'yylex' 和 'yyin'
- javascript - 如何从Ruby变量存储在Javascript中的localStorage
- android - 使用导航组件在不同图形之间导航
- tfs - Azure Devops 指定较短的路径错误
- ios - 如何使用图表 (IOS) 在 X 轴上显示每个月
- r - 在 R 中自动选择最优 GARCH 模型
- sql-server - 通用 ODBC 连接字符串适用于 SQL Server 2005+
- c# - 当前上下文中不存在 TextToSplit
- ios - 当用户停止使用 swift 5 说话时如何终止语音识别
- docker - Logstash 不处理 filebeat 发送的文件