Compartilhar via


Classificação de resultados de pesquisa no SharePoint

Tópico de visão geral conceitual

Classifique os resultados da pesquisa de maneira programática - por classificação, por valor da propriedade gerenciada, por uma expressão de fórmula ou em ordem aleatória - usando o modelo de objeto consulta no SharePoint.

Você pode classificar os resultados da pesquisa do SharePoint de quatro maneiras:

Este artigo aborda a classificação de resultados da pesquisa por programação. Para saber como classificar os resultados usando as regras de consulta do SharePoint, confira os seguintes artigos:

Como especificar a classificação em uma solicitação de consulta

Ao usar o modelo de objeto Query, você pode escolher os critérios de classificação fornecendo uma especificação de classificação por meio da propriedade SortList da classe KeywordQuery . A propriedade SortList é do tipo SortCollection, que representa uma coleção de objetos classificados.

Um objeto Sort define uma maneira de classificar os resultados da pesquisa; ele consiste em um valor que você deseja solicitar resultados de pesquisa em (Propriedade) e uma direção na qual você deseja ordenar os resultados (Direção). A direção é do tipo SortDirection() e pode ser crescente ou decrescente.

Se você tiver vários valores no SortList, a classificação será executada com base na sequência na qual os valores aparecem. Isso significa que cada objeto classificar representa um nível de ordem de classificação. Qualquer nível subsequente não altera a ordem dos resultados diferenciados por anteriores, mas pode afetar a ordem interna de resultados tem os mesmos valores de classificação para os níveis anteriores.

Além do modelo de objeto da consulta, o SharePoint também fornece um serviço de pesquisa REST que você pode usar para o índice de pesquisa de consulta com um cliente ou aplicativos móveis. O serviço de Pesquisa REST dá suporte a solicitações HTTP POST e HTTP GET. Para obter mais informações sobre como construir URIs para essas solicitações, consulte Consulta com o serviço REST de Pesquisa.

Classificar resultados de pesquisa por ordem de classificação

Por padrão, os resultados da pesquisa são classificados pela classificação de relevância. Isso significa que o SharePoint coloca os resultados mais relevantes na parte superior do conjunto de resultados de pesquisa. Se classificar por posição, os resultados são sempre classificados em ordem decrescente. Mas você pode alterar a ordem de classificação para crescente usando SortDirection().

Você também pode influenciar a classificação cálculo na cadeia de consulta em uma das seguintes maneiras:

Classificar resultados da pesquisa por valor da propriedade gerenciada

Você pode especificar a classificação de resultados da pesquisa com base no valor de uma ou mais propriedades gerenciadas. Isso significa que o SharePoint executa a classificação com base em todos os resultados que correspondem a consulta.

Você pode classificar com base no texto e propriedades numéricas. Para propriedades do texto, a classificação se baseia na classificação de cadeia de texto padrão. Por outro lado, para propriedades numéricas (incluindo propriedades gerenciadas do tipo DateTime), a classificação se baseia no valor numérico.

Exemplo

O exemplo a seguir mostra como classificar os resultados de pesquisa usando a propriedade Size gerenciados.


using (var context = new ClientContext("http://localhost"))
{
    var query = new KeywordQuery(context)
    {
        QueryText = "home"
    };
    query.SortList.Add("Size", SortDirection.Descending);

    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);

    context.ExecuteQuery();

    foreach (var result in results.Value[0].ResultRows)
    { 
        Console.WriteLine(result["Title"] + " Size:" + result["Size"]);
    }
}

Como alternativa, você pode usar a API REST de pesquisa para classificar os resultados de pesquisa usando a propriedadeTamanho com chamada a seguir.


http://localhost/_api/search/query?querytext='home'&sortlist='size:descending'

Classificar resultados da pesquisa uma expressão de fórmula

Você pode especificar a classificação de resultados de pesquisa com base em uma especificação de classificação que usa uma fórmula matemática para criar o valor de classificação.

Classificar por recurso fórmula é uma extensão do nível único e vários níveis de classificação a funcionalidade de resultados da pesquisa. O recurso permite que você especifique uma fórmula, em vez de uma propriedade gerenciada como critérios de classificação.

Usando a classificação pelo recurso de fórmula, você pode aplicar operações matemáticas no valor de uma ou mais propriedades gerenciadas para cada item no resultado da consulta.

A seguir estão exemplos que podem ser implementados por meio de uma fórmula para especificar a classificação de resultados de pesquisa:

  • Algoritmo de vizinhos K-mais próximo para classificar os documentos.

  • Distância Euclidean ou distância Manhattan para calcular distâncias geográficas.

  • Preferencial valor, por exemplo, para classificar documentos com base em um valor de propriedade gerenciada determinado quanto é de um valor de preferência.

Classificar por recurso fórmula não incluem o controle dos parâmetros de classificação dinâmicos estatísticos, como a frequência de termos e proximidade.

A fórmula é avaliada para a esquerda para direita e usa precedência de operador matemático standard. Ou seja, funções e grupos entre parênteses são avaliados primeiro, operações de multiplicação e divisão são executadas em seguida e operações de adição e subtração são executadas última.

Importante

[!IMPORTANTE] O resultado final de uma fórmula deve estar no intervalo valor de um inteiro assinado de 32 bits. Caso contrário, a classificação pode estar incorreta.

Especificando a fórmula de classificação em uma consulta

Você pode especificar uma fórmula de classificação, em vez de uma propriedade gerenciada na especificação de classificação da solicitação de consulta.

A especificação de classificação tem o seguinte formato: [formula:<sort-formula>]

No formato, <a fórmula> de classificação é a expressão de fórmula de classificação.

Observação

Os colchetes fazem parte da sintaxe de especificação da classificação.

A direção da classificação padrão é decrescente. Você também pode usar uma fórmula que classifica por ordem crescente valor, por exemplo, se a fórmula Especifica uma distância geográfica.

O exemplo de código a seguir mostra como especificar classificação pela fórmula com a ordem de classificação é crescente usando o modelo de objeto de consulta.

using (var context = new ClientContext("http://localhost"))
{
    var query = new KeywordQuery(context)
    {
        QueryText = "home"
    };
    query.SortList.Add("[formula:abs(2000-size)]", SortDirection.Ascending);

    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);

    context.ExecuteQuery();

    foreach (var result in results.Value[0].ResultRows)
    { 
        Console.WriteLine(result["Title"]);
    }
}

Como alternativa, você poderia usar a API REST de pesquisa para classificar os resultados de pesquisa usando a propriedade Size com a chamada a seguir.


http://localhost/_api/search/query?querytext='home'&amp;sortlist='[formula:abs(2000-size)]:ascending'

Usar propriedades gerenciadas na fórmula classificar

Você pode aplicar uma fórmula de classificação do valor das propriedades gerenciadas do tipo Inteiro, Decimal, e Datetime(). Habilite a classificação da propriedade gerenciada especificada no esquema de pesquisa.

Para propriedades mais gerenciadas do tipo Decimal, o valor é multiplicado por 10^(dígitos decimais) antes de ser usado na avaliação da fórmula.

Para propriedades gerenciadas do tipo Datetime()](/previous-versions/office/developer/sharepoint-2010/ms500214(v%3Doffice.14)), o valor é convertido no número de 100 nanossegundos desde janeiro de 19000 a.C. antes de ser usado na avaliação da fórmula. Há 366 dias no ano.

Classificar expressões de fórmula

A tabela 1 lista as funções que você pode usar na expressão de fórmula de classificação. A expressão não deve conter espaços.

Tabela 1. Funções para expressões de fórmula de classificação

Function Description
+
Especifica a adição.
-
Especifica a subtração.
*
Especifica a multiplicação.
/
Especifica a divisão.
Observação: Por padrão, uma divisão por zero resulta na exceção e a consulta retorna com um erro. Usando o operador errtolast, você pode evitar o erro de consulta e colocar em vez disso, os itens de falha no final do conjunto de resultados.
Classificação
Uma palavra-chave especial que representa a classificação dinâmica de um item.
Exemplo: abs(rank-100) usará a distância do valor de classificação 100 como critério de classificação.
[0 a 9] +
Especifica que os números podem ser fornecidos como valores inteiros ou duplos.
Exemplos: 503, 3.14, 5.4352262
[a-z0-9]+]
Especifica que qualquer sequência de caracteres não reconhecida como um nome de função é tratada como um nome de propriedade gerenciada. Você deve habilitar a classificação para a propriedade gerenciada especificada no esquema de pesquisa.
Exemplo: É possível definir uma propriedade gerenciada nomeada height com a classificação habilitada. Isso permite que você use "altura" como uma expressão na fórmula. A fórmula usará o valor da propriedade height gerenciados.
( and )
Usado para cálculos de grupo garantindo precedência correta.
Exemplo: 4*(3+2)
Sqrt(n)
A raiz quadrada de n.
exp(n)
A função exponencial equivalente a pow(2.71828182846,n)
log(n)
O logaritmo natural de n.
abs(n)
O valor absoluto de n.
ceil(n)
O teto de n. Ou seja, se n não for um número inteiro, arredondar para o próximo número inteiro. Se n é um número inteiro, use n.
floor(n)
O chão de n. Ou seja, se n não for um número inteiro, arredondar para o próximo número inteiro. Se n é um número inteiro, use n.
Round(n)
O arredondamento de n para o número inteiro mais próximo. Também conhecido como "Arredondamento de banqueiros" ou "Arredonda metade para número par".
sin(n)
O seno de n radians.
cos(n)
O cosseno de n radians.
tan(n)
A tangente de n radians.
asin(n)
A arcsina, em radianos, de n.
acos(n)
A arccosina, em radianos, de n.
atan(n)
O arctangent, em radianos, de n.
pow(x,y)
O valor de x gerado para o poder de y.
Observação: o valor de y deve ser um número real.
atan2(y,x)
Um argumento de dois arco tangente do ângulo em radianos entre o eixo x positivo e a coordenada cartesiano especificada (x, y).
bucket(b,n1,n2,…)
Um operador que pode ser usado para fornecer valores discretos para dado intervalos de distribuição de valor de uma expressão.
A expressão b pode ser uma propriedade gerenciada ou qualquer outra expressão de fórmula. Os argumentos n1, n2, ... representam limites numéricos. Você pode especificar um número arbitrário de limites de bucket.
Observação: você deve organizar os argumentos n1, n2, n3, ... na seguinte ordem: n1 < n2 < n3 < ... com n1 >= 0. Um determinado valor para a expressão de entrada b é arredondado para baixo para o limite numérico mais próximo fornecido. Se for menor do que o limite mais baixo dado, o valor resultante é zero.
errtolast(x)
Um operador que pode ser usado para controlar como lidar com exceções de fórmula; x pode ser qualquer expressão de fórmula. Se o cálculo dessa expressão de fórmula leva a uma exceção matemática para um item no conjunto de resultados, como divisão por zero, esses itens aparecem no final da lista Classificar, independentemente da direção da classificação especificada.

Características de desempenho para classificar por fórmula

Usando uma fórmula de classificação implica que os cálculos de fórmula são aplicados a todos os itens correspondentes no conjunto de resultados. Isso significa que o impacto no desempenho consulta depende do número de itens que correspondem à consulta.

Fórmulas longas com muitos operadores exigem mais tempo de processamento que fórmulas curtas.

Usar a opção classificar pela fórmula para a distância geográfica

Você pode usar Classificar por fórmula para aplicar uma classificação com base na distância. Isso requer que você inclua propriedades gerenciadas que representam a latitude e longitude de cada item.

Por exemplo, você pode usar uma das seguintes fórmulas padrão:

  • Distância Manhattan

  • Distância Euclidian (consulte o exemplo 2)

  • Fórmula de Haversine

Importante

Use propriedades gerenciadas do tipo Decimal ou Float para representar os valores de latitude e longitude.

Exemplos

Os exemplos a seguir mostram como especificar a fórmula de classificação usando o modelo de objeto de consulta.

Exemplo 1. Coloque os itens que têm a propriedade height gerenciados mais próximos como 20 na parte superior da lista de resultados.


using (var context = new ClientContext("http://localhost"))
{
    var query = new KeywordQuery(context)
    {
        QueryText = "home"
    };
    query.SortList.Add("[formula:abs(20-height)]", SortDirection.Ascending);

    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);

    context.ExecuteQuery();

    foreach (var result in results.Value[0].ResultRows)
    { 
        Console.WriteLine(result["Title"]);
    }
}

Como alternativa, você poderia usar a API REST de pesquisa para colocar os itens que têm a propriedade height gerenciados mais próximos 20 na parte superior da lista de resultados, com a chamada a seguir.


http://localhost/_api/search/query?querytext='home'&amp;sortlist='[formula:abs(20-height)]:ascending

Exemplo 2. Classificar por true 3D Euclidean distância de uma determinada posição (por exemplo, posição do usuário) com base nas informações de posição que são fornecidas nas propriedades gerenciadas latitude, longitude e height. A fórmula a seguir fornece a distância Euclidean 3D, visto que a posição de base é 50/100/200 (longitude/latitude/altura).

sqrt(pow(50-latitude,2)+pow(100-longitude,2)+pow(200-height,2))

Se você quiser aplicar uma classificação baseada em distância (não combinando a distância com outros parâmetros em uma fórmula), poderá remover o sqrt() componente, pois ele não altera a sequência de classificação; mas melhora o desempenho da consulta.

using (var context = new ClientContext("http://localhost"))
{
    var query = new KeywordQuery(context)
    {
        QueryText = "home"
    };
    query.SortList.Add("[formula:pow(50-latitude,2)+pow(100-longitude,2)+pow(200-height,2)]", SortDirection.Ascending);

    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);

    context.ExecuteQuery();

    foreach (var result in results.Value[0].ResultRows)
    { 
        Console.WriteLine(result["Title"]);
    }
}

Exemplo 3. Round os valores de tamanho em partições de memória, arredondamento de valores para baixo até um dos seguintes: 0, 5, 15, 50, 100; Classifique primeiro com maiores valores.


using (var context = new ClientContext("http://localhost"))
{
    var query = new KeywordQuery(context)
    {
        QueryText = "home"
    };
    query.SortList.Add("[formula:bucket(size,5,15,50,100)]", SortDirection.Ascending);

    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);

    context.ExecuteQuery();

    foreach (var result in results.Value[0].ResultRows)
    { 
        Console.WriteLine(result["Title"]);
    }
}

Classificar resultados de pesquisa em ordem aleatória

Você pode aplicar uma classificação aleatória do resultado da consulta ou adicionar um componente aleatório para a classificação de resultados.

A especificação de classificação aleatória tem o seguinte formato: [random:seed=<seed>:hashfield=<managed property>]

Observação

Os colchetes fazem parte da sintaxe de especificação da classificação.

Tabela 2 explica os parâmetros a especificação de classificação aleatório.

Tabela 2. Parâmetros para a especificação de classificação aleatória

Parâmetro Description Required
Seed
A propagação para a geração de valor aleatório.
O valor da semente é a entrada para uma função que gera um número aleatório. Esse número aleatório é usado na classificação final. Usar apenas a opção de semente fornecerá um conjunto de resultados de consulta classificado aleatoriamente. A ordem de classificação da mesma consulta (ao usar a mesma semente) pode ser alterada após uma atualização de índice.
Sim
Hashfield
Uma propriedade gerenciada que é usada como o valor de hash para a geração aleatória. Você pode usar esse parâmetro para garantir que a ordem de classificação para a mesma consulta (ao usar a mesma propagação) não é alterada após uma atualização do índice.
A propriedade gerenciada deve ser do tipo Integer e deve ser Classificável(). Você pode preencher essa propriedade gerenciada com valores de forma aleatórias ou exclusivos (por exemplo, um número sequencial preenchido em um item de estágio processamento).
Não

Fornecendo a propagação mesma para consultas iguais, itens serão apresentados na mesma ordem. Isso permite que você preservar a mesma ordem aleatório ao paginar os resultados da pesquisa. Use o parâmetro hashfield se quiser preservar a mesma ordem aleatória quando uma atualização de índice ocorrer acidentalmente entre as consultas.

Exemplos

Os exemplos a seguir mostram como especificar classificação aleatório usando o modelo de objeto de consulta.

Exemplo 1. Classificar o conjunto em ordem aleatória de resultados inteiro.


using (var context = new ClientContext("http://localhost"))
{
    var query = new KeywordQuery(context)
    {
        QueryText = "home"
    };
    query.SortList.Add("[random:seed=5432]", SortDirection.Ascending);

    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);

    context.ExecuteQuery();

    foreach (var result in results.Value[0].ResultRows)
    { 
        Console.WriteLine(result["Title"]);
    }
}

Como alternativa, você poderia usar a API REST de pesquisa para classificar o conjunto em ordem aleatória, com a seguinte chamada de resultados inteiro.


http://localhost/_api/search/query?querytext='home'&amp;sortlist='[random:seed=5432]:ascending

Exemplo 2. Classificar o conjunto em ordem aleatória de resultados inteiro. Preserve a mesma seqüência aleatória para a mesma consulta com a mesma propagação, mesmo se ocorre uma alternância de índice. Uma propriedade gerenciada personalizada denominada hashvalue deve estar disponível no esquema de pesquisa e preenchidos com valores numéricos de aleatórios ou sequenciais para todos os itens indexados.

using (var context = new ClientContext("http://localhost"))
{
    var query = new KeywordQuery(context)
    {
        QueryText = "home"
    };
    query.SortList.Add("[random:seed=6543:hashfield=hashvalue]", SortDirection.Ascending);

    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);

    context.ExecuteQuery();

    foreach (var result in results.Value[0].ResultRows)
    { 
        Console.WriteLine(result["Title"]);
    }
}

Confira também