elasticsearch Elasticsearch-添加单独的聚合查询,elasticsearch,elasticsearch" /> elasticsearch Elasticsearch-添加单独的聚合查询,elasticsearch,elasticsearch" />

elasticsearch Elasticsearch-添加单独的聚合查询

elasticsearch Elasticsearch-添加单独的聚合查询,elasticsearch,elasticsearch,下面是elasticsearch查询,我使用它从聚合中获取结果和结果的过滤器选项。问题在于,每当有人应用过滤器时,总体结果都会发生变化,因此过滤器选项也会发生变化。除非查询参数更改,否则我不希望过滤器选项更改。现在我要打两个电话: 无需聚合即可获得所有结果 通过使用聚合并将size参数设置为0来获取所有筛选器 这种方法使用2个api请求,因此时间增加了一倍。这只能在一个请求中完成吗 第一次调用:没有聚合的所有结果 { "query": { "bool": { "shoul

下面是elasticsearch查询,我使用它从聚合中获取结果和结果的过滤器选项。问题在于,每当有人应用过滤器时,总体结果都会发生变化,因此过滤器选项也会发生变化。除非查询参数更改,否则我不希望过滤器选项更改。现在我要打两个电话:

  • 无需聚合即可获得所有结果

  • 通过使用聚合并将size参数设置为0来获取所有筛选器

  • 这种方法使用2个api请求,因此时间增加了一倍。这只能在一个请求中完成吗

    第一次调用:没有聚合的所有结果

    {
      "query": {
        "bool": {
          "should": [
            {
              "match_phrase": {
                "title": {
                  "query": "cooking",
                  "boost": 2,
                  "slop": 10
                }
              }
            },
            {
              "match": {
                "title": {
                  "query": "cooking",
                  "boost": 1
                }
              }
            }
          ],
          "minimum_should_match": 1,
          "filter": [
            {
              "match": {
                "is_paid": false
              }
            }
          ]
        }
      },
      "sort": [],
      "from": 0,
      "size": 15
    }
    
    第二次呼叫:获取筛选器

    {
      "query": {
        "bool": {
          "should": [
            {
              "match_phrase": {
                "title": {
                  "query": "cooking",
                  "boost": 2,
                  "slop": 10
                }
              }
            },
            {
              "match": {
                "title": {
                  "query": "cooking",
                  "boost": 1
                }
              }
            }
          ],
          "minimum_should_match": 1
        }
      },
      "size": 0,
      "aggs": {
        "courseCount": {
          "terms": {
            "field": "provider",
            "size": 100
          }
        },
        "paidCount": {
          "terms": {
            "field": "is_paid",
            "size": 3
          }
        },
        "subjectCount": {
          "terms": {
            "field": "subject",
            "size": 30
          }
        },
        "levelCount": {
          "terms": {
            "field": "level",
            "size": 4
          }
        },
        "pacingCount": {
          "terms": {
            "field": "pacing_type",
            "size": 4
          }
        }
      }
    }
    

    如果您不关心第二次查询中的过滤器,您可以将
    size
    设置为非零,这将使您的
    命中率
    与第一次查询类似。在这种情况下,我将无法过滤查询。如果我添加过滤器,聚合也会产生影响。您可以在聚合中添加过滤器我需要在主查询中使用过滤器,否则用户将无法筛选数千条记录。在聚合查询中再次添加筛选器将筛选筛选结果。如果我再次只在聚合查询中保留过滤器,用户将无法过滤结果。添加全局聚合也没有帮助,因为它包含所有文档。