full text search com solr, mysql full text e postgresql full text

Download Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text

Post on 25-May-2015

301 views

Category:

Technology

3 download

Embed Size (px)

DESCRIPTION

Slides usados na palestra Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text que apresentei hoje pela manha no #TheDevConf #TDCPOA #TDC2014

TRANSCRIPT

  • 1. Full Text Search com Solr,MySQL Fulltext e PostgreSQLFulltext searchPor que usar? Quando usar? Qual usar?

2. Rodrigo UrubatanProgramador desde 1997Autor do livro: Ruby on Railsdesenvolvimento fcil e rpidode aplicaes webhttp://urubatan.com.brhttp://sobrecodigo.comhttp://twitter.com/urubatanhttp://github.com/urubatan 3. O que FTS?Full Text Search um recurso utilizadoquando precisamos buscar texto de formamais eficiente em uma grande massa de dadosEngines de FTS permitem uma maiorflexibilidade que um like %valor%"Normalmente tambm uma maior performance 4. Quais so as opes disponveis?Alguns bancos de dados como o MySQL, oPostgres e o Oracle possuem engines internasde FTSExistem servidores externos tambm como oSolr, Sphinx entre outros 5. O que vamos ver hoje? 6. MySQLExtremamente fcil de configurarBastante rpidoTem problemas com alguns caracteres, por exemplo no possvel pesquisar por AT&TNo necessita esforo adicional para indexar, funciona comum ndice simplesO critrio de pesquisa precisa ser fixo para uma query (no possvel comparar com o valor de um campo) 7. PostgreSQLQuase to fcil de configurar quanto o MySQLPerformance semelhanteInterpretador de consultas mais inteligente (possvel pesquisar por AT&T, mesmo ele buscandopor /AT.T/ ) necessrio uma trigger para atualizar o campo decache do ::tsvector 8. SolrMais difcil de configurarPerformance espetacularExtremamente flexvelNecessita de cdigo na aplicao para indexar eatualizar indicesPesquisas extremamente rpidas, indexao bastantelenta se comparada com as outras opes 9. Ok, mas quando vou precisar disto?Imagina se tu tem um site de noticias e querque teus usurios pesquisem pelo texto dasnoticias?Ou tu tem uma lista de empresas e os teusclientes podem procurar pelo nome ou pelocdigo das aes delas? 10. J pensou em implementar umGoogle?Pesquisar por: +campo bom & +agricultura 11. Ok, mas como fao isto? 12. MySQLalter table companiesadd FULLTEXT KEY allfields(name,ticker_symbol,exchange_symbol);select * from companieswhere match(name,ticker_symbol,exchange_symbol)against("petrobras"); 13. Qual a diferena? 14. select exchange_symbol, group_concat(name) from companieswhere match(name) against("petrobras")group by exchange_symbol;3 linhas 0.021sselect exchange_symbol, group_concat(name) from companieswhere name like "%petrobras%"group by exchange_symbol;3 linhas 4.101sum like levou 195X o tempo do FTS 15. PostgreSQLalter table companiesadd text tsvector;CREATE INDEX companies_text ON companies USING gin(text);update companiesset text = to_tsvector(concat(name, , ticker_symbol, ,exchange_symbol);select * from companieswhere text @@ petrobras::tsquery; 16. Qual a diferena? 17. select exchange_symbol, array_agg(name) from companieswhere text @@ 'petrobras'::tsquerygroup by exchange_symbol;18msselect exchange_symbol, array_agg(name) from companieswhere name like '%petrobras%'group by exchange_symbol;2308msFTS 128X mais rapido que like 18. SolrInstalar sunspot_rails e sunspot_solr no projeto railsAdicionar cdigo para indexar classes:class Company < ActiveRecord::Basesearchable dotext :nametext :exchange_and_ticker do"#{self.exchange_symbol}:#{self.ticker_symbol}"endendendCompany.reindex #senta e espera#verso mais rpida: Company.find_in_batches{|batch| Sunspot.index!(batch)} 19. res = Company.search dofulltext('petrobras')end13.5ms - com configurao de desenvolvimento (rakesunspot:solr:start)Company.where("name like ?", %petrobras%")4080.5msSolr 302X mais rpido que like 20. boosting de resultadosPost.search dofulltext 'pizza' doboost(2.0) { with(:featured, true) }endendPost.search dofulltext 'pizza' dofields(:body, :title => 2.0)endend 21. Resultados Facetadossearch = Post.search dofulltext "pizza"facet :author_idendsearch.facet(:author_id).rows.each do |facet|puts "Author #{facet.value} has #{facet.count}pizza posts!"end 22. Exemplos ao vivo? 23. Qual o melhor? 24. A resposta : quais asnecessidades da sua aplicao?

Recommended

View more >