/SolrDotnetSample

Quick and simple use of Solr with dotnet core

Primary LanguageC#MIT LicenseMIT

Sample with .NET Core and SolrNet

CodeFactor .NET Core Console App - Docker Image CI WebApi - Docker Image CI

Este projeto tem como objetivo explorar o funcionamento do SolrNet no consumo do serviço de search engine Solr em projetos .NET Core.

Getting Started

Após o clone do projeto e siga os passos descritos na etapa de instalação.

git clone https://github.com/AntonioFalcao/SolrDotnetSample.git

Prerequisites

Se faz necessário ambiente com seguintes recursos:

To check this functionality:

dotnet --version

For more details

dotnet --info

To install:

dotnet tool install --global dotnet-ef

To check this functionality:

dotnet-ef --version
  • Docker - The container platform used

To check this functionality:

docker --version

Installing

Com o uso de containerização, podemos provisionar de forma prática a infraestrutura necessária.

Inicialmente utilizaremos o serviço Solr, para atender a necessidade de Search Engine, através do compose ./solr-compose.

docker-compose -f solr-compose.yml up -d

O índice padrão, referido como Core pelo Solr está definido como my_core no entrypoint, assim como o mapeamento de porta padrão 8983:8983:

 services: 
# comment for brevity
    ports:
      - "8983:8983"
    entrypoint:
      - solr-precreate
      - my_core
# comment for brevity

Definindo Fields

A definição dos Fields no Solr é um passo essencial, para garantir que o dado terá a mesma representação desejada pelo modelo.

Existem dois caminhos para isso, um deles é definir os detalhes dos fields no schema.xml, a outra forma é realizando chamadas direta à API do serviço. Para segunda alternativa, existe o arquivo solr-add-fields.http disponível no projeto:

POST http://localhost:8983/solr/my_core/schema
Content-Type: application/json

{
   "add-field":{
      "name":"Description",
      "type":"string",
      "stored":true
      },
   "add-field":{
      "name":"Title",
      "type":"string",
      "stored":true
      },
}

### comment for brevity

Semeando dados no Solr

Uma vez provisionado o ambiente e configurado os fields, podemos semear dados através dos passos:

  1. Aplicar migrations do EF Core, que já se encarregará do Seed para o DB relacional.

Nesta etapa irá ocorrer a semeadura de dados para o DB relacional.

dotnet ef database update -s ./src/SolrDotnetSample.WebApi/ -p ./src/SolrDotnetSample.Repositories/
  1. Executar aplicação console e selecionar opção de semeadura para o Solr.

Duas opções estarão disponíveis, sendo:

  1. Gerar novos dados.
  2. Migrar dados do relacional.
docker build -t seed -f ./consoleApp.Dockerfile . && docker run -it seed

Running the tests

Automated tests

Os testes unitários e de integração podem ser executados com o respectivo comando:

dotnet test

Functional tests

Para executarmos testes de forma funcional, devemos inicialmente executar o projeto para disponibilizar o serviço Web.

docker build -t webapi -f ./webApi.Dockerfile . && docker run -p 5000:5000 webapi 

O roteamento segue o padrão http://hostname:port/api/v{version}/controller

Para realizar chamadas, pode estar utilizando o arquivo ./basic-api-call.http através da extensão REST Client, por exemplo:.

/api/v1/... utiliza o banco de dados relacional.
/api/v2/... utiliza o Solr

### V1 - Relational DB
GET http://localhost:5000/api/v1/posts

### V2 - NoSql DB
GET http://localhost:5000/api/v2/posts

### V1 - Relational DB
POST http://localhost:5000/api/v1/posts
Content-Type: application/json

{
  "Description": "Description",
  "ExpiryDate": "2020-01-01",
  "IsActive": true,
  "IsSold": true,
  "PostDate": "2020-01-01",
  "Price": 0,
  "Title": "Title"
}

### comment for brevity

Deployment

Detalhes sobre esteira (CI/CD) disponíveis em Project GitHub Actions

Built With

Microsoft Stack
Solr Stack
  • Solr - Search Engine used.
  • SolrNet - Apache Solr client for .NET

Contributing

Available soon!

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Authors

See also the list of contributors who participated in this project.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments

  • Nothing more, for now.