Mecanismo de Busca com Node.js + MongoDB
-
Upload
luiz-fernando-duarte-jr -
Category
Software
-
view
138 -
download
0
Embed Size (px)
Transcript of Mecanismo de Busca com Node.js + MongoDB



Mecanismo de busca com 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çãoConceitos
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:\mongo\bin> mongod --dbpath C:\nodejs\searchengine\data
Applications/mongo/bin> ./mongod --dbpath
/Users/luizfduartejr/nodejs/searchengine/data


MongoDB
Subindo o cliente:
C:\mongo\bin> mongo
Applications/mongo/bin> ./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:single thread, Javascript
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 i -g express-generator

Node.js
Criando um projeto Express:C:\nodejs> express searchengine
Executando um projeto Express:C:\nodejs\searchengine> npm start
Acessando um projeto Express:http://localhost:3000


Node.js
Estrutura de pastas:bin, node_modules, public, routes e views.
Arquivos importantes:bin/www, app.js e packages.json
Objetos importantes:app, http, server

Node.js
Instalando dependência do EJS:C:\nodejs\searchengine> npm i -S ejs
Configurando a view engine:- alterar app.js
- renomear views para .ejs
- escrever HTML

Node.js
index.ejs:
<!DOCTYPE html>
<html lang="en">
<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>


Node.js
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{ %>
<b>Nenhum resultado encontrado para <%= search %></b>
<% } %>

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

Node.js
index.js:
/* GET search page. */
router.get('/search', function (req, res, next) {
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 });
});
});



Referências




Dúvidas?

Obrigado!