Elasticsearch: Motor de busca e além

Elasticsearch: Motor de busca e além

B7c717dcd9deb459903bd744e89f219f?s=128

Miguel Gallardo

August 31, 2014
Tweet

Transcript

  1. elasticsearch. Motor de busca e além Lições aprendidas criando Tu

    Proximo Trabajo.
  2. Miguel Gallardo Mais de 10 anos de experiência como desenvolvedor,

    com um salário. Fanático por computador desde os 7 anos de idade. Desenvolvedor desde os 13 anos de idade. Eu sempre estou buscando melhorar minhas habilidades, me tornei um programador poliglota que trabalha em várias linguagens de programação e múltiplos paradigmas de desenvolvimento.
  3. Miguel Gallardo Mais de 10 anos de experiência como desenvolvedor,

    com um salário. Fanático por computador desde os 7 anos de idade. Desenvolvedor desde os 13 anos de idade. Eu sempre estou buscando melhorar minhas habilidades, me tornei um programador poliglota que trabalha em várias linguagens de programação e múltiplos paradigmas de desenvolvimento.
  4. None
  5. 6 anos Search the web using Google! 10 results Google

    Search I'm feeling lucky We've moved. New site at google.com About the Google Stanford Project Get Google! updates monthly! your e-mail Subscribe Archive Copyright ©1997-8 Stanford University
  6. • 52.069 empregados (Q2 2014) • renda: ~US$ 60 bilhões

    • Valor de mercado: ~US$ 392 bilhões • +4 milhões de servidores • 120 bilhões buscas por mês • Adsense, Gmail, google maps, street view, youtube, android, chrome, etc ¿Google?
  7. ¿como podemos fazer o próximo Google? Google?

  8. LIKE / MYSQL FULL TEXT • SELECT * FROM `table`

    WHERE `field` LIKE “%text%"; • SELECT * FROM `table` MATCH (`field`,`desc`) AGAINST ("Text") • Muito facil de implementar • Desempenho é ruim (fácil de DoS) • Sharding manual • corrupção MyISAM • Sintaxe de consulta limitada • No é un motor de busca! ¿SQL?
  9. ¿motor de busca SQL?

  10. • Launched 2006 • ~3 milhões de avisos • ~1000

    fuentes de avisos • “SasaIndex” • RIP 2010 GoSasa
  11. • Lançado 2007 • 9 milhões ofertas de empregos histórico

    • 200K ofertas de emprego atuais • 80K visitas mensal • 1º motor de busca de emprego na Argentina * Tu Próximo Trabajo
  12. None
  13. MySQL Sphinx Apache Crawlers 2008

  14. Sphinx é um servidor de pesquisa de texto completo de

    código aberto, projetado a partir do zero com o desempenho, relevância (aka a qualidade da pesquisa), e simplicidade de integração em mente.
  15. • Alta velocidade de indexação (10~15 MB/s em uma •

    CPU) • Alta velocidade de pesquisa (500+ queries/sec) • Alta escalabilidade: Craigslist.org • 300 milhões de consultas/dia • 15 clusters • BoardReader.com: +16 bilhões de documentos indexados em 37 máquinas. • Fala protocolo MySQL
  16. • Não é em tempo real! Reindexação de dados completo

    (2008) • Configuração da velha escola (.conf files) • Configuração de cluster complexo • Velha escola • difícil de instalar, configurar e escalabilidade • Protocolo proprietário • Não de esquema livre
  17. “Solr é uma plataforma de pesquisa de código aberto do

    projeto Apache Lucene. Suas principais características incluem pesquisa de texto completo, bateu destacando, pesquisa facetada, clustering dinâmica, integração de banco de dados e de documentos ricos (por exemplo, Word, PDF). Pesquisa distribuída e replicação do índice, Solr é altamente escalável.” Solr/Lucene
  18. Um Sistema de Gestão de Documentos intuitiva, criada por advogados

    para advogados • servidor backend: php • Clientes: ruby, java, net • MySQL para dados. MongoDB para arquivos e documentos
  19. None
  20. Solr/Lucene

  21. elasticsearch. new kid on the block

  22. Elasticsearch é um motor de pesquisa e análise flexível e

    poderoso, distribuido, em tempo real e código aberto.
  23. Elasticsearch é um motor de pesquisa e análise flexível e

    poderoso, distribuido, em tempo real e código aberto. • JSON • RESTful API • “Schema free”
  24. Elasticsearch é um motor de pesquisa e análise flexível e

    poderoso, distribuido, em tempo real e código aberto. • Master nodes & data nodes; • Réplicas e fragmentos automáticas • Transporte assíncrona entre nodos
  25. Elasticsearch é um motor de pesquisa e análise flexível e

    poderoso, distribuido, em tempo real e código aberto. • Flush cada 1 segundo
  26. elasticsearch. Evolução • Indexadores personalizados • Índices invertidos • Analisadores

    personalizados • Faceting • Configuração de analisadores • Faceting, Geoespacial • Mapeamento de documentos • Consultas de sub-documentos • Replicação • JSON • Faceting, consultas complexas
  27. None
  28. None
  29. None
  30. 2014 HAProxy Crawler MySQL Saver Parser Nginx Beanstalkd

  31. Pesquisando 50 milhões de locais em tempo real? Foursquare faz

    isso usando ElasticSearch Pesquisa 20TB de dados usando ElasticSearch, incluindo 1,3 bilhões de arquivos e 130 bilhões de linhas de código Usa ElasticSearch para fornecer resultados imediatos e relevantes para a sua plataforma de distribuição de áudio em linha atingindo 180 milhões de pessoas Usa ElasticSearch para fornecer resultados de mais de 20 milhões de produtos, um segundo depois de um artigo foi publicado já está disponível nos resultados Usa ElasticSearch para fornecer resultados de 25 milhões de usuários por dia. 70 milhões de documentos indexados. 215 GB de Dados
  32. Pesquisa não estruturada

  33. Pesquisa estruturada (FACETS!)

  34. Enriquecimento

  35. Ordenar por

  36. Paginação

  37. Agregação

  38. Conceitos • Cluster Um grupo de nodos compartilhando o mesmo

    conjunto de índices • Node Uma instância ElasticSearch em execução (processo JVM) • Index ≈ MySQL database Um conjunto de documentos de possivelmente diferentes tipos Armazenado em um ou mais fragmentos • Type ≈ MySQL Table um conjunto de documentos em um índice que compartilham o mesmo esquema • Shard Um índice Lucene, alocado em um nodo
  39. como instalar? 1. Faça o download e extrair: http://www.elasticsearch.org/download/ 2.

    $ bin/elasticsearch Debian/Ubuntu 1. apt-get install elasticsearch RPM 1. yum install elasticsearch
  40. API: Apenas REST! http://HOST:PORT/índice(s)/tipo(s)/_action|id métodos HTTP: GET, PUT, POST, DELETE

    Clientes: • Curl • PHP - elastica/celastica • Ruby • Python • Perl • JS • ETC
  41. Indexar um documento CURL -XPUT ‘http://localhost:9200/movies/movie/1' -d ‘{ "title" :

    "Django Unchained", "genre" : "western", "release_date" : "2012-12-25" }’
  42. Atualizar um documento CURL -XPUT ‘http://localhost:9200/movies/movie/1' -d ‘{ "director" :

    { "lastname" : "Tarantino", "firstname" : "Quentin" }, "actors" : [ { "lastname" : "Foxx", "firstname" : "Jamie" }, { "lastname" : "Waltz", "firstname" : "Christoph" }, { "lastname" : "Tarantino", "firstname" : "Quentin" }, ] }’
  43. Buscar um documento CURL -XGET ‘http://localhost:9200/movies/movie/_search?q=Tarantino' -d ‘{ "_index" :

    "movies", "_type" : "movie", "_id" : "1", "_version" : "2", "title" : "Django Unchained", "genre" : "western", "release_date" : "2012-12-25", "director" : { "lastname" : “Tarantino", "firstname" : "Quentin" }, "actors" : [ { "lastname" : “Foxx", "firstname" : "Jamie" }, { "lastname" : “Waltz", "firstname" : "Christoph" }, { "lastname" : “Tarantino", "firstname" : "Quentin" }, ] }’
  44. Mapeamento - Schema CURL -XPUT ‘http://localhost:9200/movies/movie/_mapping' -d ‘{ "movies" :

    { "properties" : { "title" : {"type" : "string"}, "genre" : {"type" : "string"}, "release_date" : {"type" : "date", "format" : "yyyy-MM-dd"}, "director" : { "type" : "object", "properties" : { "lastname" : {"type" : "string"}, "firstname" : {"type" : "string"} } }, } } }’
  45. Query dsl match, field, query_string, bool, term, Fuzzy, match_all,more like

    this, geo, Range, wildcard, span, ...
  46. Filtros limit, and, or, not, exists, geo_distance,geo_distance_range, geo_box, geo_shape, range

    numeric_range, has_parent, has_child ...
  47. Rivers Um River é um serviço pluggable funcionando dentro elasticsearch

    conjunto puxando dados (ou sendo empurrado com os dados) que é, então, indexada no cluster. • CouchDB • rabbitmq • twitter • wikipedia • MongoDB • JDBC
  48. Percolator A consulta pode ser salvo como um documento em

    elasticsearch, qualquer nova coador documento correspondente será adicionado ao http:// HOST:PORT/índice(s)/tipo(s)/_percolate.
  49. Motor de busca e alem. Elasticsearch, logstash e kibana

  50. Logstash Logstash ajuda a tirar logs e outros dados de

    eventos de tempo com base de qualquer sistema e armazená-lo em um único lugar para transformação e processamento adicional.
  51. Kibana

  52. ELK stack

  53. Miguel Gallardo @mg3dem miguel@tuproximotrabajo.com

  54. Miguel Gallardo @mg3dem miguel@tuproximotrabajo.com Obrigado!