首页 > 解决方案 > 在 Elastic 中搜索多个索引时限制每个索引的大小

问题描述

我一直在遵循这篇文章的指导方针。我可以获得所需的输出,但在同一个 DSL 中,如何限制每个索引的结果大小?

使用 NEST C# 在弹性搜索中使用多个索引进行全文搜索

POST http://localhost:9200/componenttypeindex%2Cprojecttypeindex/Componenttype%2CProjecttype/_search?pretty=true&typed_keys=true     
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "filter": [
              {
                "term": {
                  "_index": {
                    "value": "componenttypeindex"
                  }
                }
              }
            ],
            "must": [
              {
                "multi_match": {
                  "fields": [
                    "Componentname",
                    "Summary^1.1"
                  ],
                  "operator": "or",
                  "query": "test"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "filter": [
              {
                "term": {
                  "_index": {
                    "value": "projecttypeindex"
                  }
                }
              }
            ],
            "must": [
              {
                "multi_match": {
                  "fields": [
                    "Projectname",
                    "Summary^0.3"
                  ],
                  "operator": "or",
                  "query": "test"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

标签: elasticsearchnest

解决方案


对于给定的查询,您可以使用聚合来分组和限制每个索引的命中数(在本例中,限制为 5):

{
  "size": 0,
  "query": {
    ... Same query as above ...
  },
  "aggs": {
    "index_agg": {
      "terms": {
        "field": "_index",
        "size": 20
      },
      "aggs": {
        "hits_per_index": {
          "top_hits": {
            "size": 5
          }
        }
      }
    }
  }
}

推荐阅读