首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在术语查询中查询/筛选已入库的文档?

在术语查询中查询/筛选已入库的文档?
EN

Stack Overflow用户
提问于 2021-03-20 02:58:48
回答 1查看 24关注 0票数 0

我有一些共享属性的数据,假设我有这些文档:

代码语言:javascript
复制
{
   session: "session-1",
   status: "New",
},
{
  session: "session-1",
  title: "My session",
},
{
   session: "session-1",
   message: "hi there",
},
{
   session: "session-2",
   status: "Closed",
},
{
   session: "session-2",
   message: "hi!",
},

如果我做一个聚合:

代码语言:javascript
复制
body: {
  aggs: {
    sessions: {
      field: "session",
    },
  },
},

我得到两个存储桶,里面有3个和2个文档:

代码语言:javascript
复制
"aggregations": {
    "sessions": {
      "doc_count_error_upper_bound": 0,   
      "sum_other_doc_count": 0,           
      "buckets": [                        
        {
          "key": "session-1",
          "doc_count": 3
        },
        {
          "key": "session-2",
          "doc_count": 2
        },
      ]
    }
  }

我可以以某种方式对存储桶运行筛选器或查询吗?

代码语言:javascript
复制
body: {
  aggs: {
    sessions: {
      field: "session",
    },
    aggs: {
      filter_docs: { bool: must [{ match: { message: "hi" } }, { match: { status: "New" } }],
    }
  },
},

我知道我可以对所有文档应用query,但我希望能够在子文档中进行更复杂的过滤(即过滤出同时包含message: histatus: New的buckets )。

EN

回答 1

Stack Overflow用户

发布于 2021-03-20 10:07:42

因为上面显示的示例中没有同时包含message: histatus: New的文档。

添加了一个使用filter aggregation过滤同时包含message: Hisession: session-1的文档的工作示例。

代码语言:javascript
复制
{
  "size": 0,
  "aggs": {
    "filtererd": {
      "filter": {
        "bool": {
          "must": [
            {
              "match": {
                "message": "hi"
              }
            },
            {
              "match": {
                "session.keyword": "session-1"
              }
            }
          ]
        }
      },
      "aggs": {
        "top_filter": {
          "top_hits": {}
        }
      }
    }
  }
}

搜索结果将是

代码语言:javascript
复制
"aggregations": {
    "filtererd": {
      "doc_count": 1,
      "top_filter": {
        "hits": {
          "total": {
            "value": 1,
            "relation": "eq"
          },
          "max_score": 1.0,
          "hits": [
            {
              "_index": "66714173",
              "_type": "_doc",
              "_id": "3",
              "_score": 1.0,
              "_source": {
                "session": "session-1",
                "message": "hi there"
              }
            }
          ]
        }
      }
    }
  }

如果要过滤terms aggregation的结果,则为

搜索查询:

代码语言:javascript
复制
{
  "size": 0,
  "aggs": {
    "genres": {
      "terms": {
        "field": "session"
      },
      "aggs": {
        "filtererd": {
          "filter": {
            "bool": {
              "must": [
                {
                  "match": {
                    "message": "hi"
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
}

搜索结果将为

代码语言:javascript
复制
"aggregations": {
    "genres": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "session-1",
          "doc_count": 3,
          "filtererd": {
            "doc_count": 1             // note this
          }
        },
        {
          "key": "session-2",
          "doc_count": 2,
          "filtererd": {
            "doc_count": 1
          }
        }
      ]
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66714173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档