Solr Search Using .NET 6

반응형

Solr는 빠르고 강력한 전체 텍스트 검색 및 패싯 검색 기능을 제공하는 인기 있는 오픈 소스 엔터프라이즈 검색 플랫폼입니다. 이는 고급 전체 텍스트 검색 알고리즘으로 유명한 Apache Lucene 라이브러리를 기반으로 구축되었습니다. Solr는 전자상거래 웹사이트, 콘텐츠 관리 시스템, 기타 엔터프라이즈 애플리케이션 등 빠르고 정확한 검색 결과가 필요한 애플리케이션에 널리 사용됩니다.

이 블로그에서는 최신 웹 애플리케이션 구축을 위한 인기 있는 크로스 플랫폼 프레임워크인 .NET Core에서 Solr 검색을 사용하는 방법을 살펴보겠습니다. Solr 인스턴스 설정부터 시작하고 SolrNet 라이브러리를 사용하여 .NET Core에서 검색을 수행하는 방법에 대한 예를 보여드리겠습니다.

 

솔러 설정

.NET Core 애플리케이션에서 Solr 사용을 시작하려면 먼저 Solr 인스턴스를 설정해야 합니다. 로컬 컴퓨터에 Solr를 설치하거나 Apache Solr as a Service와 같은 클라우드 기반 솔루션을 사용할 수 있습니다.

  1. 공식 Apache Solr 웹사이트에서 Solr를 다운로드하세요.
  2. 선택한 디렉터리에 Solr 배포판을 추출합니다.
  3. Solr 배포판의 bin 디렉터리로 이동하고 다음 명령을 실행하여 Solr를 시작합니다.

etc-image-0

4. http://localhost:8983/solr로 이동하여 Solr 관리 UI에 액세스합니다.

 

SolrNet 설정

SolrNet은 Solr과 통신하기 위해 간단하고 사용하기 쉬운 API를 제공하는 .NET 라이브러리입니다. .NET Core 애플리케이션에서 SolrNet을 사용하려면 다음 단계를 따르세요.

  1. Visual Studio 또는 dotnet CLI를 사용하여 새 .NET Core 프로젝트를 만듭니다.
  2. 패키지 관리자 콘솔에서 다음 명령을 실행하여 SolrNet.Core 및 SolrNet.Microsoft.DependencyInjection NuGet 패키지를 설치합니다.

etc-image-1
etc-image-2

3. Program.cs 파일에 다음 코드를 추가하여 SolrNet을 구성합니다.

 

using SolrNet;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSolrNet("http://localhost:8983/solr/test");
builder.Services.AddScoped<IProductSolrRepository, ProductSolrRepository>();

 

검색 수행

이제 Solr 및 SolrNet을 설정했으므로 .NET Core 애플리케이션에서 검색을 수행할 수 있습니다. 다음 코드는 SolrNet을 사용하여 Solr에서 간단한 검색을 수행하는 방법을 보여줍니다.

 

using SolrNet.Attributes
namespace SolrSearch;
public class Product
{
    [SolrUniqueKey("id")]
    public string Id { get; set; }
    [SolrField("name")]    
    public string Name { get; set; }
    [SolrField("manu")]
    public string Manufacturer { get; set; }
    [SolrField("desc")]
    public string Description { get; set; }
    [SolrField("cat")]
    public ICollection<string> Categories { get; set; }
    [SolrField("price")]
    public decimal Price { get; set; }
    [SolrField("inStock")]
    public bool InStock { get; set; }
};
using SolrNe
namespace SolrSearch;
public class ProductSolrRepository : IProductSolrRepository
{
    private readonly ISolrOperations<Product> _solr;
    public ProductSolrRepository(ISolrOperations<Product> solr)
    {
        _solr = solr;
    }
    public async Task Add(Product product)
    {        
        await _solr.AddAsync(product);
        await _solr.CommitAsync();
    }
    public async Task Delete(Product product)
    {
        await _solr.DeleteAsync(product);
        await _solr.CommitAsync();
    }
    public Product GetById(string Id)
    {
        Product solrResult = _solr.Query(new SolrQueryByField("id", Id)).FirstOrDefault();
        if (solrResult != null)
            return solrResult;
        return null;
    }
    public IEnumerable<Product> Search(string searchNameString)
    {
        if (!string.IsNullOrEmpty(searchNameString))
            return _solr.Query(new SolrQueryByField("name_str", $"name_str:*{searchNameString.Replace(' ', '*')}*")).ToList();
        else
            return _solr.Query(SolrQuery.All).ToList();                                                                                                                                                                                                                                                     
    }
}

 

이 예에서는 ISolrOperations<Product> 인터페이스를 사용하여 Solr과 통신하고 검색을 수행합니다. SolrQuery 클래스는 우리가 달성하려는 쿼리를 나타내고 ToList 메서드는 결과를 Product 개체 목록으로 반환합니다.

전체 코드를 다운로드하려면 링크를 클릭하세요.

 

결론

Solr는 빠르고 정확한 전체 텍스트 검색과 패싯 검색 기능을 제공하는 강력하고 유연한 검색 플랫폼입니다. Solr과 통신하기 위해 간단하고 사용하기 쉬운 API를 제공하는 .NET 라이브러리인 SolrNet을 사용하면 Solr 검색을 .NET Core 애플리케이션에 쉽게 통합할 수 있습니다. 전자 상거래 웹사이트, 콘텐츠 관리 시스템 또는 다른 유형의 엔터프라이즈 애플리케이션을 구축하든 Solr는 검색 요구 사항에 가장 적합한 선택입니다. 고급 전체 텍스트 검색 알고리즘과 유연한 아키텍처를 갖춘 Solr는 모든 검색 요구 사항에 맞는 안정적이고 확장 가능한 솔루션입니다.

반응형