Mecanismo de busca .NET Core + MongoDB

51
Mecanismo de busca com .NET Core + MongoDB

Transcript of Mecanismo de busca .NET Core + MongoDB

Page 1: Mecanismo de busca .NET Core + MongoDB

Mecanismo de busca com .NET Core + MongoDB

Page 2: Mecanismo de busca .NET Core + MongoDB

Apresentação

Conceitos Fundamentais

MongoDB

.NET Core

Referências

Dúvidas

Cronograma

Page 3: Mecanismo de busca .NET Core + MongoDB

Ciência da Computação

Computação Móvel

Dev, analista, gerente...

11 anos programando

- 7 anos com mecanismos de busca

- 3 buscadores no ar

- inúmeros projetos

Page 4: Mecanismo de busca .NET Core + MongoDB
Page 5: Mecanismo de busca .NET Core + MongoDB
Page 6: Mecanismo de busca .NET Core + MongoDB
Page 7: Mecanismo de busca .NET Core + MongoDB

Conceitos Fundamentais

Page 8: Mecanismo de busca .NET Core + MongoDB

Fonte de Dados

Classificação

Indexação

Pesquisa

AtualizaçãoConceitos

Fundamentais

Page 9: Mecanismo de busca .NET Core + MongoDB

1. Fonte de Dados

- Carga de dados

- crawling

- SQL

Page 10: Mecanismo de busca .NET Core + MongoDB

2. Classificação

- redes neurais

- machine learning

- rankings

- NoSQL?

Page 11: Mecanismo de busca .NET Core + MongoDB
Page 12: Mecanismo de busca .NET Core + MongoDB

3. Indexação

- normalização

- tagging

- inverted index

- stopwords, sinônimos

- NoSQL!

Page 13: Mecanismo de busca .NET Core + MongoDB
Page 14: Mecanismo de busca .NET Core + MongoDB

4. Pesquisa

- normalização

- tagging

- inverted index

- stopwords, sinônimos

- resultados

Page 15: Mecanismo de busca .NET Core + MongoDB

5. Atualização

- index rebuild?

- live update?

- Redis…

- MongoDB!

Page 16: Mecanismo de busca .NET Core + MongoDB

MongoDB

Page 17: Mecanismo de busca .NET Core + MongoDB
Page 18: Mecanismo de busca .NET Core + MongoDB

MongoDB

Onde baixo?http://mongodb.org

O que mais vou precisar?GUI Mongo: http://studio3t.com (opcional)

- free

- tenha RAM de sobra

- orientado a documentos

- schemaless

- array fields

- indexed array fields

Page 19: Mecanismo de busca .NET Core + MongoDB

MongoDB

Subindo servidor:

$ cd C:\mongo\bin

$ mongod --dbpath C:\dotnetprojects\buscador\data

Page 20: Mecanismo de busca .NET Core + MongoDB
Page 21: Mecanismo de busca .NET Core + MongoDB

MongoDB

Subindo o cliente:

C:\mongo\bin> mongo

Page 22: Mecanismo de busca .NET Core + MongoDB
Page 23: Mecanismo de busca .NET Core + MongoDB

MongoDB

Carga de dados:use searchengine

custArray = [{"Nome":"Luiz Júnior", "Profissao":"Professor", "Tags":["LUIZ","JUNIOR","PROFESSOR"]}, {"Nome":"Luiz Fernando", "Profissao":"Autor", "Tags": ["LUIZ","FERNANDO","AUTOR"]}, {"Nome":"Luiz Tools", "Profissao":"Blogueiro", "Tags": ["LUIZ","TOOLS","BLOGUEIRO"]}, {"Nome":"Luiz Duarte", "Profissao":"Blogueiro", "Tags": ["LUIZ","DUARTE","BLOGUEIRO"]}]db.Customer.insert(custArray);

Page 24: Mecanismo de busca .NET Core + MongoDB
Page 25: Mecanismo de busca .NET Core + MongoDB

MongoDB

Índice:

db.Customer.createIndex({"Tags":1});

Page 26: Mecanismo de busca .NET Core + MongoDB
Page 27: Mecanismo de busca .NET Core + MongoDB

.NET Core

Page 28: Mecanismo de busca .NET Core + MongoDB

.NET Core

Vantagens:multiplataforma, veloz, escala, velocidade e baixo custo, C#

Desvantagens:imaturidade, falta muita biblioteca ainda

Page 29: Mecanismo de busca .NET Core + MongoDB
Page 30: Mecanismo de busca .NET Core + MongoDB

.NET Core

Onde baixo?https://www.microsoft.com/net/core

Como verifico se está funcionando?dotnet --version

O que mais vou precisar?Visual Studio Community (opcional)

https://www.visualstudio.com/pt-br/downloads/

Page 31: Mecanismo de busca .NET Core + MongoDB

.NET Core

Criando o projeto:

Page 32: Mecanismo de busca .NET Core + MongoDB
Page 33: Mecanismo de busca .NET Core + MongoDB

.NET Core

customizando shared/_Layout.cshtml:<li><a asp-area="" asp-controller="Home" asp-action="Search">Search</a></li>

customizando Views/Home/Search.cshtml:

<div class="row" style="margin-top: 20px"> <form method="GET" action="/Home/Search"> <p><label>Pesquisa: <input type="text" name="q" /></label></p> <p><input type="submit" value="Pesquisar" class="btn btn-primary" /></p> </form></div>

Page 34: Mecanismo de busca .NET Core + MongoDB
Page 35: Mecanismo de busca .NET Core + MongoDB

.NET Core

Dependência MongoDB:

Page 36: Mecanismo de busca .NET Core + MongoDB

.NET Core

customizando Models/Customer.cs: public class Customer { [BsonId] public ObjectId Id { get; set; } [BsonRequired] [BsonElement("Nome")] public string Nome { get; set; }

public string Profissao { get; set; } public List<string> Tags { get; set; } }

Page 37: Mecanismo de busca .NET Core + MongoDB

.NET Core

customizando Models/DataAccess.cs:public class DataAccess{ MongoClient _client; IMongoDatabase _db;

public DataAccess() { _client = new MongoClient("mongodb://localhost:27017"); _db = _client.GetDatabase("searchengine"); }

public long CountCustomers(){ return _db.GetCollection<Customer>(typeof(Customer).Name).Count(new FilterDefinitionBuilder<Customer>().Empty); }

Page 38: Mecanismo de busca .NET Core + MongoDB

.NET Core

Teste para ver se funciona:// HomeController.cspublic IActionResult Search(){ ViewData["Message"] = "Search page."; ViewData["Count"] = new DataAccess().CountCustomers(); return View();}

<!-- Search.cshtml --><p>@Html.Raw(ViewData["Count"]) clientes cadastrados!</p>

Page 39: Mecanismo de busca .NET Core + MongoDB
Page 40: Mecanismo de busca .NET Core + MongoDB

.NET Core

customizando Models/DataAccess.cs:public IEnumerable<Customer> GetCustomers(string query){ var tags = query.ToUpper().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries).ToList(); var filter = Builders<Customer>.Filter.All(c => c.Tags, tags); return _db.GetCollection<Customer>(typeof(Customer).Name).Find(filter).ToList();}

Page 41: Mecanismo de busca .NET Core + MongoDB

.NET Core

customizando HomeController.cs: public IActionResult Search(String q) { ViewData["Message"] = "Search page."; var da = new DataAccess(); ViewData["Count"] = da.CountCustomers();

if(!String.IsNullOrEmpty(q)) { return View(da.GetCustomers(q)); }

return View(); }

Page 42: Mecanismo de busca .NET Core + MongoDB

.NET Core

customizando Search.cshtml:

<hr /> @if(Model != null) { <ul> @foreach(var item in Model) { <li>@Html.DisplayFor(modelItem => item.Nome)</li> } </ul> }

Page 43: Mecanismo de busca .NET Core + MongoDB
Page 44: Mecanismo de busca .NET Core + MongoDB
Page 45: Mecanismo de busca .NET Core + MongoDB
Page 46: Mecanismo de busca .NET Core + MongoDB

Referências

Page 47: Mecanismo de busca .NET Core + MongoDB
Page 48: Mecanismo de busca .NET Core + MongoDB
Page 49: Mecanismo de busca .NET Core + MongoDB
Page 50: Mecanismo de busca .NET Core + MongoDB

Dúvidas?

Page 51: Mecanismo de busca .NET Core + MongoDB

Obrigado!