我对ES有点新,我不知道如何做以下事情:
我使用查询运行搜索,该查询只包含一些“应该”参数 .
然后还有一些汇总,例如百分位数,术语暂停等
但是对于聚合,我只想要它,例如,聚合在前1000个文档中(我希望然后通过得分对其进行评分和排序) .
我的想法是,我希望aggs用于特定术语,但如果找不到足够的,则将其填满 - 但仅限于要聚合的特定最大数量 . 从文档中可以看出 size
是它返回的文档数,而不是用于aggs的大小(我不需要点击,只返回aggs) .
那么我该怎么做呢?是否有嵌套/后续查询?我必须 pipeline
,例如得到1k文档的搜索,然后攻击?
如果文档可以首先按索引的时间戳进行排序是理想的 - 那么用于“填充”的文档是最新的 - 但AFAIK是不可能的?
Fill it up?
'填充'意味着我有一个指定的'should'字段有100个文档 . 然后我还需要其他900个文档,以便将所需的1k结果大小聚合(以便将其填充到所需的数量) . 因此,我没有使用过滤器,而是在文档中看到了“组合查询”,我认为使用'should'参数就足够了 .
1 回答
解:
要聚合文档子集,请使用Sampler聚合器 . 返回文档的子集 . 它需要一个shard_size参数,该参数是必须返回的每个分片的文档数 . 给出的值是所需的文档大小(100)除以活动分片(5) .
有了子样本,它现在可以通过管道聚合 . 这给出了解决方案,但让它变得更好 .
这将按分数对文档进行排序,然后按创建日期对文档进行排序,这意味着将返回最相关的文档,并按顺序提供最新的文档 .
此外:
这里的相关内容是
should
. 这允许文档与最相关的文档'filled up'匹配或紧密匹配(并且与最新的相等)进行排序 . 这些字段大多是not_analyzed
. 此外,它可以提升,为问题提供一个非常好的解决方案 .