Refinar resultados de pesquisa usando agregação (visualização)Refine search results using aggregations (preview)

Refine os resultados da pesquisa e mostre sua distribuição no índice.Refine search results and show their distribution in the index.

Exemplo 1: Solicitar agregação por campos de cadeia de caracteresExample 1: Request aggregations by string fields

O exemplo a seguir pesquisa recursos listItem e agrega resultados por seu tipo de arquivo e classe de conteúdo, ambos são valores de cadeia de caracteres.The following example searches listItem resources and aggregates results by their file type and content class, both of which are string values.

A resposta inclui dois objetos searchBucket para as duas agregação:The response includes two searchBucket objects for the two aggregations:

  • A propriedade de chave especifica o valor real (por ou ) para os objetos FileType contentclass listItem correspondentes que são agregados no mesmo bucket por esse valor.The key property specifies the actual value (by FileType or contentclass) for those matching listItem objects that are aggregated in the same bucket by that value.
  • A propriedade count especifica o número de tais objetos agregados no mesmo bucket.The count property specifies the number of such objects aggregated in the same bucket. Observe que esse número é uma aproximação do número de combinações e não fornecerá um número exato de combinações.Note that this number is an approximation of the number of matches and will not provide an exact number of matches.
  • Buckets de resultados agregados por tipo de arquivo são organizados por contagem em ordem decrescente.Buckets of results aggregated by file type are sorted by count in descending order. Neste exemplo, há 3 buckets para 3 tipos de arquivo: docx xlsx e pptx .In this example, there are 3 buckets for 3 file types: docx, xlsx, and pptx.
  • Buckets de resultados agregados por classe de conteúdo são organizados pelo valor da cadeia de caracteres da classe de conteúdo em ordem decrescente.Buckets of results aggregated by content class are sorted by the string value of the content class in descending order. Neste exemplo, há apenas um bucket com todos os objetos correspondentes compartilhando a mesma classe de STS_ListItem_DocumentLibrary conteúdo.In this example, there is only one bucket with all the matching objects sharing the same content class, STS_ListItem_DocumentLibrary.

SolicitaçãoRequest

POST https://graph.microsoft.com/beta/search/query
Content-Type: application/json

{
  "requests": [
    {
      "entityTypes": [
          "listItem"
      ],
      "query": {
          "queryString": "test"
      },
      "from": 0,
      "size": 25,
      "aggregations": [
          {
              "field": "FileType",
              "size": 20,
              "bucketDefinition": {
                  "sortBy": "count",
                  "isDescending": "true",
                  "minimumCount": 0
              }
          },
          {
              "field": "contentclass",
              "size": 15,
              "bucketDefinition": {
                  "sortBy": "keyAsString",
                  "isDescending": "true",
                  "minimumCount": 0
              }
          }
      ]
    }
  ]
}

RespostaResponse

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.type": "#microsoft.graph.searchResponse",
    "hitsContainers": [
        {
            "@odata.type": "#microsoft.graph.searchHitsContainer",
            "hits": [
                "..."
            ],
            "total": 9,
            "moreResultsAvailable": false,
            "aggregations": [
                {
                    "@odata.type": "#microsoft.substrateSearch.searchAggregation",
                    "field": "FileType",
                    "buckets": [
                        {
                            "@odata.type": "#microsoft.substrateSearch.searchBucket",
                            "key": "docx",
                            "count": 5,
                            "aggregationFilterToken": "\"ǂǂ646f6378\""
                        },
                        {
                            "@odata.type": "#microsoft.substrateSearch.searchBucket",
                            "key": "xlsx",
                            "count": 3,
                            "aggregationFilterToken": "\"ǂǂ786c7378\""
                        },
                        {
                            "@odata.type": "#microsoft.substrateSearch.searchBucket",
                            "key": "pptx",
                            "count": 1,
                            "aggregationFilterToken": "\"ǂǂ70707478\""
                        }
                    ]
                },
                {
                    "@odata.type": "#microsoft.substrateSearch.searchAggregation",
                    "field": "contentclass",
                    "buckets": [
                        {
                            "@odata.type": "#microsoft.substrateSearch.searchBucket",
                            "key": "STS_ListItem_DocumentLibrary",
                            "count": 9,
                            "aggregationFilterToken": "\"ǂǂ5354535f4c6973744974656d5f446f63756d656e744c696272617279\""
                        }
                    ]
                }
            ]
        }
    ]
}

Exemplo 2: Aplicar um filtro de agregação com base em uma solicitação anteriorExample 2: Apply an aggregation filter based on a previous request

Neste exemplo, aplicamos um filtro de agregação baseado no aggregationFilterToken retornado como o campo docx no exemplo FileType 1.In this example, we apply an aggregation filter that is based on the aggregationFilterToken returned for docx as the FileType field in example 1.

O valor da cadeia de caracteres atribuído à propriedade aggregationFilters segue o formato "{field}: \ "{aggregationFilterToken} \ "".The string value assigned to the aggregationFilters property follows the format "{field}:\"{aggregationFilterToken}\"". Se vários valores para o mesmo filtro são necessários, o valor de cadeia de caracteres atribuído à propriedade aggregationFilters deve seguir este formato: "{field}:or( \ "{aggregationFilterToken1} \ ", \ "{aggregationFilterToken2} \ ")".If multiple values for the same filter are required, the string value assigned to the aggregationFilters property should follow this format : "{field}:or(\"{aggregationFilterToken1}\",\"{aggregationFilterToken2}\")".

SolicitaçãoRequest

POST https://graph.microsoft.com/beta/search/query
Content-Type: application/json

{
  "requests": [
    {
      "entityTypes": [
          "driveItem"
      ],
      "query": {
          "queryString": "test"
      },
      "from": 0,
      "size": 20,
      "aggregations": [
          {
              "field": "FileType",
              "size": 10,
              "bucketDefinition": {
                  "sortBy": "count",
                  "isDescending": "true",
                  "minimumCount": 0
              }
          }
      ],
      "aggregationFilters": [
        "FileType:\"ǂǂ68746d6c\""
      ]
    }
  ]
}

RespostaResponse

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.type": "#microsoft.graph.searchResponse",
    "hitsContainers": [
        {
            "@odata.type": "#microsoft.graph.searchHitsContainer",
            "hits": [
                "..."
            ],
            "total": 69960,
            "moreResultsAvailable": true,
            "aggregations": [
            {
                "@odata.type": "#microsoft.substrateSearch.searchAggregation",
                "field": "FileType",
                "buckets": [
                    {
                        "@odata.type": "#microsoft.substrateSearch.searchBucket",
                        "key": "html",
                        "count": 69960,
                        "aggregationFilterToken": "\"ǂǂ68746d6c\""
                    }
                ]
            }
        ]
        }
    ]
}

Exemplo 3: Solicitar agregação por um campo numéricoExample 3: Request aggregation by a numeric field

O exemplo a seguir pesquisa recursos driveItem e agrega resultados por seu tamanho, que é um valor numérico.The following example searches driveItem resources and aggregates results by their size which is a numeric value. A solicitação especifica a agregação por 3 intervalos de tamanho:The request specifies aggregation by 3 size ranges:

  • Tamanho menor que 100Size less than 100
  • Tamanho entre 100 e 1000Size between 100 and 1000
  • Tamanho 1000 e superiorSize 1000 and higher

A resposta inclui três objetos searchBucket, um para cada agregação de intervalo de tamanho:The response includes 3 searchBucket objects, one for each size range aggregation:

  • Os 2 buckets dos intervalos de tamanho inferior não incluem nenhuma pesquisa coincidente.The 2 buckets of the lower size ranges don't include any search matches.
  • Todas as 9 pesquisas têm tamanhos 1.000 ou superior.All 9 search matches have sizes 1000 or higher.

SolicitaçãoRequest

POST https://graph.microsoft.com/beta/search/query
Content-Type: application/json

{
    "requests": [
        {
            "entityTypes": [
                "driveItem"
            ],
            "query": {
                "queryString": "test"
            },
            "from": 0,
            "size": 10,
            "aggregations": [
                {
                    "field": "Size",
                    "size": 5,
                    "bucketDefinition": {
                        "sortBy": "keyAsNumber",
                        "isDescending": "true",
                        "minimumCount": 0,
                        "ranges": [
                            {
                                "to": "100"
                            },
                            {
                                "from": "100",
                                "to": "1000"
                            },
                            {
                                "from": "1000"
                            }
                        ]
                    }
                }
            ]
        }
    ]
}

RespostaResponse

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.type": "#microsoft.graph.searchResponse",
    "hitsContainers": [
        {
            "@odata.type": "#microsoft.graph.searchHitsContainer",
            "hits": [
                "..."
                    ],
            "total": 9,
            "moreResultsAvailable": false,
            "aggregations": [
                {
                    "@odata.type": "#microsoft.substrateSearch.searchAggregation",
                    "field": "Size",
                    "buckets": [
                        {
                            "@odata.type": "#microsoft.substrateSearch.searchBucket",
                            "key": "Less than 100",
                            "count": 0,
                            "aggregationFilterToken": "range(min, 100)"
                        },
                        {
                            "@odata.type": "#microsoft.substrateSearch.searchBucket",
                            "key": "100 up to 1000",
                            "count": 0,
                            "aggregationFilterToken": "range(100, 1000)"
                        },
                        {
                            "@odata.type": "#microsoft.substrateSearch.searchBucket",
                            "key": "1000 and up",
                            "count": 9,
                            "aggregationFilterToken": "range(1000, max, to=\"le\")"
                        }
                    ]
                }
            ]
        }
    ]
}

Limitações conhecidasKnown limitations

As agregação são suportadas apenas para itens do SharePoint ou do OneDrive.Aggregations are supported only for SharePoint or OneDrive items. Não há suporte para mensagem ou evento.They are not supported for message or event.

Próximas etapasNext steps