Requisitos: A busca em texto completo no site é uma função comumente utilizada, e é comumente usada com base nelaElasticSearch、SolrImplantação e desenvolvimento, e agora dois novos lançamentos foram lançadosRedisSearch、MeiliSearchOs dois primeiros são mais pesados, embora os dois últimos não sejam tão pesados quanto os dois primeiros, mas ainda precisam implantar serviços dependentes; este artigo usa Lucene.Net + Jieba.NET para construir uma busca local leve.
Lucene.Net
Lucene.Net é uma adaptação .NET do Lucene e é um kit de desenvolvimento de mecanismo de busca em texto completo de código aberto, ou seja, não é um mecanismo de busca completo em texto completo, mas sim uma arquitetura de mecanismo de busca em texto completo que oferece um mecanismo de consulta completo e um motor de indexação.
Local:O login do hiperlink está visível. Endereço do GitHub:O login do hiperlink está visível.
Jieba.NET
Jieba.NET é um particípio chinês jieba. .NET versão (implementação em C#). Ele pode realizar funções como segmentação de palavras, anotação de partes gramaticais, extração de palavras-chave, etc., para texto chinês, e suporta dicionários personalizados.
Endereço do GitHub:O login do hiperlink está visível.
Primeiro, vamos dar uma olhada nas renderizações:
Personalize o Analisador
Analyzer, TokenStream, Tokenizer, TokenFilterTokenStream in Lucene TokenStream: Um fluxo obtido após o tokenizador ter sido processado. Esse fluxo armazena várias informações sobre segmentação de palavras, que podem ser obtidas de forma eficaz por meio do TokenStream. A seguir está o processo de converter o fluxo de arquivos em um TokenStream. Primeiro, use o Tokenizer para segmentar as palavras, diferentes tokenizadores têm tokenziers diferentes; após separar o tokenzier, filtrar os dados que foram divididos em palavras pelo TokenFilter, como palavras de parada. Após filtrar, combine todos os dados em um TokenStream.
Referência:
O login do hiperlink está visível.
O login do hiperlink está visível.
O login do hiperlink está visível.
Para personalizar o analisador Lucene com base em Jieba.NET, a primeira referência é a seguinte:
Consulte diretamente o pacote Lucene.Net.Analysis.Common, pois Lucene.Net.Analysis.Common depende do pacote Lucene.Net para baixar automaticamente.
Crie um novo JiebaTokenizer.cs com o seguinte código:
Crie um novo JiebaAnalyzer.cs com o seguinte código:
Lucene.Net Criar novos documentos e buscas
Adicione dados de um site ao Lucene regularmente ou com acionamento, e o Lucene armazena o documento em um disco físico pelo analisador, e então chama a interface de busca para encontrá-lo.
O código da classe de ajuda LuceneHelper é o seguinte:
Armazenar armazenamento
Store.YES: Ele não só indexa os dados, mas também salva os dados, para que os resultados da busca possam devolver informações de campo. Store.NO: Apenas os dados serão indexados, e os dados não serão salvos, e os resultados da busca não podem obter essa informação do campo.Economiza espaço em disco;
Como mostrado abaixo:
Tipo de campo
Os tipos de campo em Lucene.Net são Int32Field, Int64Field, SingleField, DoubleField, BinaryDocValuesField, NumericDocValuesField, SortedDocValuesField, StringField, TextField, StoredField, Por favor, use o tipo de dado apropriado de acordo com sua situação.
TextField vs. StringField
O TextField será definitivamente lexicalizado, o StringField não realizará análise lexical do conteúdo armazenado no doc, veja:O login do hiperlink está visível.
Busca composta ocorrendo
Existem 6 combinações dos seguintes:
1. MUST e DEVE: Obter a interseção de cláusulas de consulta consecutivas. 2. MUST e MUST_NOT: Indica que os resultados de busca da cláusula de consulta correspondente à MUST_NOT não podem ser incluídos nos resultados da consulta. 3. DEVE e MUST_NOT: Quando usada continuamente, a função é a mesma de MUST e MUST_NOT. 4. Quando DEVE e DEVE são usados juntos, o resultado é o resultado de busca da cláusula MUST, mas DEVE afetar a ordenação. 5. DEVE e DEVERIA: Indica a relação entre "ou", e o resultado final da busca é a união de todas as cláusulas de pesquisa. 6.MUST_NOT e MUST_NOT: sem sentido, recuperação sem resultados.
Conduza o projeto
Neste ponto, você pode iniciar o projeto para adicionar, atualizar e buscar o código da interface da seguinte forma:
Erros podem ser reportados da seguinte forma:
Uma exceção não tratada ocorreu durante o processamento da solicitação.
DirectoryNotFoundException: Could not find a part of the path 'C:\Users\itsvse_nuc11\source\repos\DiscuzSearch\DiscuzSearch\bin\Debug\net6.0\Resources\prob_trans.json'. Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(string fullPath, modo FileMode, acesso ao FileAccess, compartilhamento FileShare, opções FileOptions)
TypeInitializationException: The type initializer for 'JiebaNet.Segmenter.JiebaSegmenter' threw an exception. jieba.net Após a instalação, você pode ver o diretório Resources no diretório packages\jieba.NET, que contém o dicionário e outros arquivos de dados necessários para rodar jieba.NET, e o método de configuração mais fácil é copiar todo o diretório Resources para o diretório onde o assembly está localizado, para que os valores padrão de configuração embutidos sejam usados jieba.NET.
C:\Users\%USERPROFILE%\.nuget\packages\jieba.net\0.42.2\Resources JiebaNet precisa adicionar uma pasta de configuração, cujo código é o seguinte:
O teste criou 500 novos documentos (relacionados à minha situação real, apenas para referência), e o disco ocupa 119KB, como mostrado na figura abaixo:
(Fim)
|