GroupDocs.Search for .NET 26.10 está agora disponível. Esta é uma versão principal: o formato do índice foi redesenhado, de modo que os índices ocupam menos espaço em disco, precisam metade da RAM e são abertos de 2 a 4 vezes mais rápido. Busca, exclusão, otimização e busca de imagens são aceleradas de várias a centenas de vezes, as buscas não esperam mais pela indexação e os dados do índice são protegidos com somas de verificação e atualizações atômicas.

Os índices existentes criados pelas versões 22.7–26.8 são convertidos para o novo formato sem reindexação. A versão contém 22 alterações: 4 novos recursos, 15 melhorias e 3 correções.

Destaques de desempenho

A maioria dos ganhos aumenta com o tamanho do índice e o número de seus segmentos.

O que Ganho em 26.10
RAM necessária por um índice carregado 2 vezes menos
Abertura de um índice De 2 a 4 vezes mais rápido
Tamanho do índice em disco Cresce proporcionalmente aos dados indexados; quanto maior o índice, maior a economia
Busca por uma palavra em índices grandes Até 2 vezes mais rápido; palavras raras de 10 a 40 vezes mais rápido
Busca difusa em índices grandes De 2,5 a 5 vezes mais rápido
Busca por curinga em índices grandes De 2,5 a 3 vezes mais rápido
Busca por curinga, expressão regular, intervalo numérico e difusa por blocos De 7 a 150 vezes mais rápido
Busca por intervalo de datas De 2 a 27 vezes mais rápido
Exclusão de documentos Centenas de vezes mais rápido, 4 vezes menos memória, sem espaço adicional em disco
Otimização do índice 4 vezes mais rápido, 4 vezes menos memória
Pico de RAM durante a indexação 2 vezes menos
Recuperação do texto armazenado de um documento Até 15 vezes mais rápido
Dados de busca de imagem 2,9 vezes menos memória, carregados 6,6 vezes mais rápido, salvos 100 vezes mais rápido; busca reversa de imagem até 1,8 vezes mais rápido
Busca enquanto o índice está sendo modificado Não bloqueia mais
Confiabilidade do índice Somas de verificação e alterações atômicas; operações interrompidas são concluídas ou revertidas
Threads de busca Todos os núcleos do processador por padrão; podem ser alterados a qualquer momento

O que há de novo nesta versão

Chave Resumo Categoria
SEARCHNET-3665 Implementar a capacidade de alterar o número de threads de busca a qualquer momento Feature
SEARCHNET-3666 Implementar uma opção para substituir caracteres substitutos não pareados Feature
SEARCHNET-3667 Implementar uma opção para ignorar termos compostos apenas por caracteres mesclados Feature
SEARCHNET-3668 Implementar atualização da versão do índice para o novo formato sem reindexar os documentos Feature
SEARCHNET-3669 Implementar otimização do consumo de espaço em disco de um índice Improvement
SEARCHNET-3670 Implementar otimização do consumo de RAM de um índice carregado Improvement
SEARCHNET-3671 Implementar otimização da velocidade de carregamento do índice Improvement
SEARCHNET-3672 Implementar otimização da velocidade de busca em índices grandes Improvement
SEARCHNET-3673 Implementar otimização da busca difusa Improvement
SEARCHNET-3674 Implementar otimização da busca por curinga Improvement
SEARCHNET-3675 Implementar otimização da exclusão e atualização de documentos Improvement
SEARCHNET-3676 Implementar otimização da operação de otimização do índice Improvement
SEARCHNET-3677 Permitir busca enquanto o índice está sendo modificado Improvement
SEARCHNET-3678 Melhorar a confiabilidade do índice Improvement
SEARCHNET-3679 Implementar otimização do uso de memória durante a indexação Improvement
SEARCHNET-3680 Implementar otimização da recuperação de texto de documentos Improvement
SEARCHNET-3681 Implementar otimização da busca de imagem Improvement
SEARCHNET-3682 Implementar tratamento de caixa de letras de forma idêntica em todas as plataformas Improvement
SEARCHNET-3688 Implementar otimização da busca por blocos Improvement
SEARCHNET-3683 Corrigir o número padrão de threads de busca Fix
SEARCHNET-3684 Impedir indexação inconsistente após alteração de dicionários de termos Fix
SEARCHNET-3685 Impedir mesclagem de índices que processam texto de forma diferente Fix

Principais recursos

Armazenamento e confiabilidade do índice

  • O tamanho do índice agora cresce proporcionalmente aos dados indexados, de modo que índices grandes com muitos segmentos economizam mais espaço.
  • Um índice carregado precisa de metade da RAM, e abrir um índice é de 2 a 4 vezes mais rápido.
  • Os dados do índice são protegidos com somas de verificação, e todas as alterações são aplicadas de forma atômica. Se uma operação for interrompida por erro, falha de energia ou término do processo, o índice permanece no seu estado consistente anterior.

Busca

  • Apenas os segmentos que contêm os termos da consulta são lidos, o que acelera a busca por palavra, difusa, por curinga e por blocos.
  • A busca usa todos os núcleos do processador por padrão, e o número de threads pode ser alterado a qualquer momento via IndexSettings.SearchThreads.
  • Buscas e operações que modificam o índice (indexação, atualização, exclusão, mesclagem, otimização) não bloqueiam mais umas às outras. Cada busca trabalha com um instantâneo consistente do índice.

Indexação e manutenção

  • A exclusão de documentos não reescreve mais o índice: os documentos são excluídos da busca imediatamente e removidos fisicamente durante a otimização.
  • A otimização do índice é 4 vezes mais rápida e usa 4 vezes menos memória; índices muito grandes são otimizados em vários segmentos de tamanho limitado.
  • A indexação consome cerca de metade da RAM de pico.

Processamento de texto

  • A caixa de letras é tratada de forma idêntica no .NET Framework e no .NET, de modo que os resultados da busca não dependem da plataforma.
  • Caracteres substitutos não pareados são substituídos por U+FFFD em vez de serem removidos, e termos que consistem apenas de caracteres mesclados não são mais indexados.

Alterações na API pública

Duas propriedades foram adicionadas à classe GroupDocs.Search.IndexSettings:

  • Boolean ReplaceUnpairedSurrogates – substitui caracteres substitutos UTF-16 não pareados pelo caractere de substituição Unicode (U+FFFD). Habilitado por padrão.
  • Boolean SkipBlendedOnlyTerms – exclui da indexação os termos que consistem apenas de caracteres mesclados. Habilitado por padrão.

Ambas as configurações são fixas quando um índice é criado.

Exemplo de código

O exemplo a seguir atualiza um índice criado por uma versão anterior para o novo formato de índice sem reindexar os documentos.

string sourceIndexFolder = @"c:\MyOldIndex\"; // Specify path to the index of a previous version
string targetIndexFolder = @"c:\MyNewIndex\"; // Specify path to the folder for the updated index

IndexUpdater updater = new IndexUpdater(); // Creating an index updater

if (updater.CanUpdateVersion(sourceIndexFolder)) // Checking whether the index version can be updated
{
    VersionUpdateResult result = updater.UpdateVersion(sourceIndexFolder, targetIndexFolder); // Updating the index version; the source index is not changed
}

Notas de atualização

Considere as seguintes mudanças ao atualizar de uma versão anterior:

  • O formato do índice mudou. Índices de versões anteriores devem ser convertidos com a classe IndexUpdater antes de serem abertos. Documentos de origem não são necessários, o índice convertido é salvo em uma pasta diferente, e o índice de origem não é modificado.
  • Dicionários de termos são fixos assim que um índice contém documentos. O alfabeto, dicionário de tokenização, substituições de caracteres, palavras de parada e as configurações UseStopWords e UseCharacterReplacements devem ser configurados antes que o primeiro documento seja indexado. Uma alteração posterior lança InvalidOperationException.
  • Índices incompatíveis não são mesclados. Index.Merge lança InvalidOperationException se os índices mesclados dividirem o texto em termos de forma diferente.
  • A busca é multithread por padrão. Com o IndexSettings.SearchThreads padrão, a busca usa tantas threads quantos forem os núcleos do processador. Para limitar o número de threads, defina a propriedade explicitamente.
  • Duas novas configurações de índice estão habilitadas por padrão. Para manter o comportamento anterior, defina ReplaceUnpairedSurrogates e SkipBlendedOnlyTerms como false antes de criar um índice.
  • Documentos excluídos são removidos fisicamente durante a otimização. Chame Index.Optimize para recuperar o espaço.
  • O número de blocos mudou. A busca por blocos não retorna mais um bloco para cada segmento. Itere sobre os blocos enquanto SearchResult.NextChunkSearchToken não for nulo em vez de confiar no número de segmentos.

Como obter a atualização

NuGet

  • NuGet – Instale o pacote mais recente:
# Package Manager
NuGet\Install-Package GroupDocs.Search -Version 26.10.0

# .NET CLI
dotnet add package GroupDocs.Search --version 26.10.0
# Package Manager
NuGet\Install-Package GroupDocs.Search.NETFramework -Version 26.10.0

# .NET CLI
dotnet add package GroupDocs.Search.NETFramework --version 26.10.0

Download direto

Recursos