Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 4068|Resposta: 2

[Fonte] [Combate prático] Use Lucene.Net + Jieba.NET para construir uma busca in-site leve

[Copiar link]
Postado em 29-10-2023 18:05:43 | | | |
Requisitos: A busca em texto completo no site é uma função comumente utilizada, e é comumente usada com base nelaElasticSearchSolrImplantação e desenvolvimento, e agora dois novos lançamentos foram lançadosRedisSearchMeiliSearchOs 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)




Anterior:Siga a conta oficial e obtenha o "código de convite" gratuitamente
Próximo:.NET converte a string varbinary do banco de dados em um array de bytes[]
 Senhorio| Postado em 29-10-2023 18:10:40 |
O Elasticsearch (ES) falha em gravar dados na solução de falha
https://www.itsvse.com/thread-10568-1-1.html

O Elasticsearch limpa automaticamente os índices para liberar espaço em disco
https://www.itsvse.com/thread-10273-1-1.html

Elasticsearch-7.x usa xpack para autenticação de segurança
https://www.itsvse.com/thread-10206-1-1.html

Implante o serviço Elasticsearch usando o Docker
https://www.itsvse.com/thread-10148-1-1.html

O Elasticsearch usa o elasticdump para fazer backup e migrar dados
https://www.itsvse.com/thread-10143-1-1.html

Instale a versão independente do tutorial Elasticsearch 7.10.2 no Windows
https://www.itsvse.com/thread-9962-1-1.html

Introdução à configuração de destaque de busca no Elasticsearch
https://www.itsvse.com/thread-9562-1-1.html

.NET/C# Use a depuração Elasticsearch para visualizar informações de solicitações e respostas
https://www.itsvse.com/thread-9561-1-1.html

ASP.NET Core Link Trace (5) Dados de Jaeger persistem no elasticsearch
https://www.itsvse.com/thread-9553-1-1.html

Elasticsearch (ES) replica o índice clone
https://www.itsvse.com/thread-9545-1-1.html

Saúde do cluster Elasticsearch(ES): status amarelo (6 de 7)
https://www.itsvse.com/thread-9544-1-1.html

Saúde do cluster Elasticsearch(ES): análise de falha vermelha
https://www.itsvse.com/thread-9543-1-1.html

Informações de Geolocalização em Java no ElasticSearch (geo_point)
https://www.itsvse.com/thread-6444-1-1.html

ElasticsearchParseException[campo deve ser [lat], [lon] ou [geohash]]
https://www.itsvse.com/thread-6442-1-1.html

Tipo Elasticsearch-Mapeamento
https://www.itsvse.com/thread-6436-1-1.html

Elasticsearch:No handler for type [string] declared on field[XX]的解决办法
https://www.itsvse.com/thread-6420-1-1.html

【Ação Prática】Tutorial de instalação de Kibana para Elasticsearch
https://www.itsvse.com/thread-6400-1-1.html

Coordenadas geogeográficas da família de características avançadas Elasticsearch
https://www.itsvse.com/thread-6399-1-1.html

Consultas compostas ElasticSearch devem, devem, must_not usar
https://www.itsvse.com/thread-6334-1-1.html

Elasticsearch exclui e indexa todos os dados do documento
https://www.itsvse.com/thread-6321-1-1.html

[Combate real]. net/c# Chamar elasticsearch search via NEST [com código-fonte]
https://www.itsvse.com/thread-6294-1-1.html

Causas e soluções para unassigned_shards Elasticsearch de nó único
https://www.itsvse.com/thread-6193-1-1.html

Tutorial sobre como instalar elasticsearch-analysis-ik no elasticsearch-6.5.2
https://www.itsvse.com/thread-6191-1-1.html

Instale o plugin elasticsearch-6.5.2 elasticsearch-head
https://www.itsvse.com/thread-6190-1-1.html

Instalação e implantação do Centos 7 elasticsearch-6.5.2 tutorial
https://www.itsvse.com/thread-6173-1-1.html

Seleção de motores de busca: Elasticsearch vs Solr
https://www.itsvse.com/thread-6168-1-1.html
 Senhorio| Postado em 05-11-2023 às 21:27:45 |
Buscar endereço de teste:https://www.itsvse.com/blog_xzz.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com