Mecanismo de busca com
Node.js + MongoDB
Apresentação
Conceitos Fundamentais
MongoDB
Node.js
Referências
Dúvidas
Cronograma
Ciência da Computação
Computação Móvel
Dev, analista, gerente...
11 anos programando
- 7 anos com mecanismos de busca
- 3 mecanismos no ar
- inúmeros projetos
Conceitos Fundamentais
Fonte de Dados
Classificação
Indexação
Pesquisa
Atualização
Conceitos
Fundamentais
1. Fonte de
Dados
- Carga de dados
- crawling
- SQL
2. Classificação
- redes neurais
- machine learning
- rankings
- NoSQL?
3. Indexação
- normalização
- tagging
- inverted index
- stopwords, sinônimos
- NoSQL!
4. Pesquisa
- normalização
- tagging
- inverted index
- stopwords, sinônimos
- resultados
5. Atualização
- index rebuild?
- live update?
- Redis…
- MongoDB!
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
MongoDB
Subindo servidor:
C:mongobin> mongod --dbpath C:nodejssearchenginedata
MongoDB
Subindo o cliente:
C:mongobin> mongo
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.customers.insert(custArray);
MongoDB
Índice:
db.customers.createIndex({"tags":1});
Node.js
Node.js
Vantagens:
multiplataforma, veloz, escala, velocidade e baixo custo, web
full-stack, assíncrono, V8 Engine, Javascript
Desvantagens:
escalonamento vertical
Cenários de Usos:
APIs, bots, mensageria, real-time, games, collaboration tools
Node.js
Quem usa?
Netflix, PayPal, LinkedIn, Groupon, Dow Jones, GoDaddy, 4all, etc
Tecnologias Concorrentes:
Go, Elixir e Scala
Node.js
Onde baixo?
http://nodejs.org
Como verifico se está funcionando?
node -v
O que mais vou precisar?
sudo npm install -g express
sudo npm install -g express-generator
Visual Studio Code (opcional)
https://code.visualstudio.com/download
Node.js
Criando um projeto Express:
C:nodejssearchengine> express -e --git
Executando um projeto Express:
npm install
npm start
Acessando um projeto Express:
http://localhost:3000
Node.js
customizando index.ejs:
<center>
<h1> Search Engine </h1>
<form action="/search" method="get">
<input type="text" name="query" />
<input type="submit" value="Search" />
</form>
</center>
Node.js
Dependência MongoDB:
npm install -S mongodb
Teste para ver se funciona:
router.get('/search', function (req, res, next) {
var db = require('mongodb');
db.connect("mongodb://localhost/searchengine")
.then(conn => console.log('funcionou!'))
.catch(err => console.log(err))
})
Node.js
customizando index.ejs:
<% if(results && list.length > 0){ %>
<b>Resultados da pesquisa por <%= search %>:</b>
<ul>
<% list.forEach(function(item){ %>
<li><%= item.nome %> (<%= item.profissao%>)</li>
<% }); %>
</ul>
<% } else if(search){ %>
<b>Nenhum resultado encontrado para <%= search %></b>
<% } %>
Node.js
customizando index.js /:
/* GET home page. */
router.get('/', function (req, res, next) {
res.render('index', { results: false, list: [], search: '', title: 'SE' })
})
Node.js
customizando index.js /search:
/* GET search page. */
router.get('/search', function (req, res, next) {
var searchParams = req.query.query.toUpperCase().split(' ')
var db = require('mongodb')
db.connect('mongodb://localhost/searchengine2')
.then(conn => conn.collection('customers').find({ tags: { $all:
searchParams } }).toArray())
.then(docs => res.render('index', { results: true, search:
req.query.query, list: docs, title: 'SE' }))
.catch(err => console.log(err))
})
Referências
Dúvidas?
Obrigado!

Mecanismo de Busca com Node.js + MongoDB