Você está na página 1de 50

Mecanismo de busca com

MongoDB
Apresentao
Conceitos Fundamentais
MongoDB
Node.js
Cronograma
Referncias
Dvidas
Cincia da Computao
Computao Mvel
Dev, analista, gerente...
11 anos programando
- 7 anos com mecanismos de busca
- 3 mecanismos no ar
- inmeros projetos
Conceitos Fundamentais
Fonte de Dados
Classificao
Indexao
Pesquisa
Conceitos
Fundamentais Atualizao
- Carga de dados
- crawling
- SQL

1. Fonte de
Dados
- redes neurais
- machine learning
- rankings
- NoSQL?
2. Classificao
- normalizao
- tagging
- inverted index
- stopwords, sinnimos
3. Indexao - NoSQL!
- normalizao
- tagging
- inverted index
- stopwords, sinnimos
4. Pesquisa - resultados
- index rebuild?
- live update?
- Redis
- MongoDB!
5. Atualizao
MongoDB
Onde baixo?
http://mongodb.org

O que mais vou precisar?


MongoDB GUI Mongo: http://studio3t.com (opcional)

- free
- tenha RAM de sobra
- orientado a documentos
- schemaless
- array fields
- indexed array fields
Subindo servidor:

C:\mongo\bin> mongod --dbpath C:\nodejs\searchengine\data

MongoDB Applications/mongo/bin> ./mongod --dbpath


/Users/luizfduartejr/nodejs/searchengine/data
Subindo o cliente:

C:\mongo\bin> mongo

MongoDB Applications/mongo/bin> ./mongo


Carga de dados:
use searchengine

custArray = [{"nome":"Luiz Jnior", "profissao":"Professor",


"tags":["LUIZ","JUNIOR","PROFESSOR"]}, {"nome":"Luiz
MongoDB 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.customers.insert(custArray);
ndice:

db.customers.createIndex({"tags":1});

MongoDB
Node.js
Vantagens:
multiplataforma, veloz, escala, velocidade e baixo custo, web
full-stack, assncrono, V8 Engine, Javascript

Node.js Desvantagens:
single thread, Javascript

Cenrios de Usos:
APIs, bots, mensageria, real-time, games, collaboration tools
Quem usa?
Netflix, PayPal, LinkedIn, Groupon, Dow Jones, GoDaddy, 4all, etc

Tecnologias Concorrentes:
Node.js Go, Elixir e Scala
Onde baixo?
http://nodejs.org

Como verifico se est funcionando?


Node.js node -v

O que mais vou precisar?


sudo npm install -g express
sudo npm i -g express-generator
Criando um projeto Express:
C:\nodejs> express searchengine

Executando um projeto Express:


Node.js C:\nodejs\searchengine> npm start

Acessando um projeto Express:


http://localhost:3000
Estrutura de pastas:
bin, node_modules, public, routes e views.

Arquivos importantes:
Node.js bin/www, app.js e packages.json

Objetos importantes:
app, http, server
Instalando dependncia do EJS:
C:\nodejs\searchengine> npm i -S ejs

Configurando a view engine:


Node.js - alterar app.js
- renomear views para .ejs
- escrever HTML
index.ejs:

<!DOCTYPE html>
<html lang="en">
Node.js <head></head>
<body>
<center>
<h1> Search Engine </h1>
<form action="/search" method="get">
<input type="text" name="query" />
<input type="submit" value="Search" />
</form>
</center>
</body>
</html>
index.ejs:

<% if(results && list.length > 0){ %>


<b>Resultados da pesquisa por <%= search %>:</b>
Node.js <ul>
<% list.forEach(function(item){ %>
<li><%= item.nome %> (<%= item.profissao%>)</li>
<% }); %>
</ul>
<% } else{ %>
<b>Nenhum resultado encontrado para <%= search %></b>
<% } %>
index.js:

/* GET home page. */


router.get('/', function(req, res, next) {
Node.js res.render('index', { results: false });
});
index.js:

/* GET search page. */


router.get('/search', function (req, res, next) {
Node.js var searchParams = req.query.query.toUpperCase().split(' ');
var db = require('../db');
var Customer = db.Mongoose.model('customers',
db.CustomerSchema, 'customers');
Customer.find({ tags: { $all: searchParams } }, function (e, docs) {
res.render('index', { results: true, search: req.query.query, list:
docs });
});
});
Referncias
Dvidas?
Obrigado!

Você também pode gostar