我需要获取事物的唯一列表,并附带一些属性。到目前为止,这只是返回一个唯一的名称列表,但是如果我想包括聚合文档的ID,该怎么办?
我正在通过.search()方法使用elasticsearch npm模块
任何帮助将不胜感激。
td_data
这将返回我想要的{key,id,doc_count}的{key,doc_count}列表
那行得通!谢谢技术专家席德!
如果我的文档看起来像这样
params.body.aggs = {
uniqueCoolThings: {
terms: {
field: 'cool_thing.name.keyword'
}
}
}
我如何找到当前匹配中的ID。例如,这是有效的查询。
{ cool_things: [{ name, id }, { name, id }] }
但是这将返回
params.body.aggs = {
uniqueCoolThings: {
terms: {
field: 'cool_things.name.keyword'
},
aggs: {
value: {
top_hits: {
size: 1,
_source: {
includes: ['cool_things.id']
}
}
}
}
}
}
}
我想知道如何执行where条件,以便它只返回与当前使用的唯一cool_things.name.keyword匹配的ID。
答案 0 :(得分:1)
您最多可以将top hits aggregation用作子聚合,以跟踪聚合文档。
示例:
相似术语聚合查询:
"aggs": {
"uniqueCoolThings": {
"terms": {
"field": "cool_thing.name.keyword"
}
}
}
将返回以下结果:
"aggregations": {
"uniqueCoolThings": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "XYZ",
"doc_count": 2
},
{
"key": "ABC",
"doc_count": 1
}
]
}
}
如果您将热门匹配聚合作为子聚合添加到上述查询中,则:
"aggs": {
"uniqueCoolThings": {
"terms": {
"field": "cool_thing.name.keyword"
},
"aggs": {
"value": {
"top_hits": {
"_source": "false"
}
}
}
}
}
您将得到以下结果:
"aggregations": {
"uniqueCoolThings": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "XYZ",
"doc_count": 2,
"value": {
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "product",
"_type": "_doc",
"_id": "BqGhPGgBOkyOnpPCsRPX",
"_score": 1,
"_source": {}
},
{
"_index": "product",
"_type": "_doc",
"_id": "BaGhPGgBOkyOnpPCfxOx",
"_score": 1,
"_source": {}
}
]
}
}
}
....
.... excluding output for brevity !!
请注意,在上述结果中,您的条款存储区中包含汇总的文档_id( value.hits.hits._id )。
不确定语法,但是类似的东西应该对您有用:
params.body.aggs = {
uniqueCoolThings: {
terms: {
field: 'cool_thing.name.keyword'
},
aggs: {
value: {
top_hits: {
_source: 'false'
}
}
}
}
}