117
Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails CODE MINER

Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Embed Size (px)

Citation preview

Page 1: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Como NÃO fazer pesquisas usando LIKE

Fabio Akita @akitaonrails

CODE MINER

Page 2: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 3: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Search está em todos os lugares

Page 4: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

SELECT * FROM PRODUCTS WHERE NAME LIKE '%Camisetas%' AND DESCRIPTION LIKE '%Camisetas%' AND NAME NOT LIKE '%Calças%' AND DESCRIPTION NOT LIKE '%Calças%'

Page 5: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 6: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Camisetas INDEX SEEK Rápido

Page 7: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Camisetas INDEX SEEK Rápido

Camisetas% INDEX SCAN Quase Rápido

Page 8: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Camisetas INDEX SEEK Rápido

Camisetas% INDEX SCAN Quase Rápido

%Camisetas% TABLE SCAN Indo pra trás

Page 9: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Índices não vão te ajudar

Page 10: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 11: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 12: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

wp-includes/taxonomy.php (1256 até 1545)

WordPress

Page 13: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

<?php function get_terms($taxonomies, $args = '') {   ...   if ( !empty($name__like) ) {     $name__like = like_escape( $name__like );     $where .= $wpdb->prepare( " AND t.name LIKE %s",       '%' . $name__like . '%' );   }      if ( ! empty( $description__like ) ) {     $description__like = like_escape( $description__like );     $where .= $wpdb->prepare( " AND tt.description LIKE %s",       '%' . $description__like . '%' );   }   ...      if ( ! empty( $search ) ) {     $search = like_escape( $search );     $where .= $wpdb->prepare( ' AND ((t.name LIKE %s) OR (t.slug LIKE %s))',       '%' . $search . '%', '%' . $search . '%' );   }   ... } ?>

Page 14: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 15: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

AbstractHelper.php

Magento

Page 16: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

<?php

public function getCILike($field, $value, $options = array()) {

  $quotedField = $this->_getReadAdapter()->quoteIdentifier($field);   return new \Zend_Db_Expr($quotedField . ' LIKE ' .     $this->addLikeEscape($value, $options)); }

?>

Page 17: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 18: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Rankeamento, Relevância

Page 19: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Rankeamento, Relevância

Frases, Proximidade, Intervalos

Page 20: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Rankeamento, Relevância

Frases, Proximidade, Intervalos

Sinônimos, "Stemmer"

Page 21: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Rankeamento, Relevância

Frases, Proximidade, Intervalos

Sinônimos, "Stemmer"

“More Like This"

Page 22: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Rankeamento, Relevância

Frases, Proximidade, Intervalos

Sinônimos, "Stemmer"

“More Like This"

“Did you mean …?"

Page 23: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Rankeamento, Relevância

Frases, Proximidade, Intervalos

Sinônimos, "Stemmer"

“More Like This"

“Did you mean …?"

Faceting (Terms, Geolocation, etc)

Page 24: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 25: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Pesquisa Não-Estruturada

Page 26: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Pesquisa Não-EstruturadaSugestões

Page 27: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Pesquisa Não-Estruturada

Ordenação

Sugestões

Page 28: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Pesquisa Não-Estruturada

Terms Facet

Ordenação

Sugestões

Page 29: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Pesquisa Não-Estruturada

Terms Facet

Ordenação

Agregação

Sugestões

Page 30: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Pesquisa Não-Estruturada

Terms Facet

Ordenação

Paginação

Agregação

Sugestões

Page 31: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

SELECT * FROM PRODUCTS WHERE MATCH (NAME, DESCRIPTION) AGAINST ('+Camisetas -Calças' IN BOOLEAN MODE)

Page 32: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

CatalogSearch/Model/Resource/Helper.php

Magento

Page 33: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

<?php

public function chooseFulltext($table, $alias, $select) {

  $field = new \Zend_Db_Expr(     'MATCH (' . $alias . '.data_index) AGAINST (:query IN BOOLEAN MODE)');

  $select->columns(array('relevance' => $field));   return $field; }

?>

Page 34: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

SELECT * FROM PRODUCTS WHERE CONTAINS( (NAME, DESCRIPTION), 'Camisetas AND NOT Calças')

Page 35: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

SELECT * FROM PRODUCTS WHERE TO_TSVECTOR(NAME || '' || DESCRIPTION) @@ TO_TSQUERY('Camisetas &! Calças')

Page 36: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 37: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 38: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 39: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Cadeias de Markov

Page 40: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Cadeias de Markov

Índices Invertidos

Page 41: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Cadeias de Markov

Índices Invertidos

Vector Space Model

Page 42: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Cadeias de Markov

Índices Invertidos

Vector Space Model

Okapi BM25

Page 43: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 44: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

http://u.akita.ws/vsm_example (Exemplo Simplificado)

Vector Space Model

Page 45: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

d1 “new york times"

d2 “new york post"

d3 “los angeles times"

Page 46: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

angeles log2(3/1)=1.584

los log2(3/1)=1.584

new log2(3/2)=0.584

post log2(3/1)=1.584

times log2(3/2)=0.584

york log2(3/2)=0.584

Page 47: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

angeles los new post times york

d1 0 0 1 0 1 1

d2 0 0 1 1 0 1

d3 1 1 0 0 1 0

Page 48: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

angeles los new post times york

d1 0 0 0.584 0 0.584 0.584

d2 0 0 0.584 1.584 0 0.584

d3 1.584 1.584 0 0 0.584 0

Page 49: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

angeles los new post times york

q 0 0 (2/2)*0.584= 0.584 0 (1/2)*0.584=

0.292 0

q = “new new times"

Page 50: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Distância d1 sqrt(0.584^2+0.584^2+0.584^2) 1.011

Distância d2 sqrt(0.584^2+1.584^2+0.584^2) 1.786

Distância d3 sqrt(1.584^2+1.584^2+0.584^2) 2.316

Distância q sqrt(0.584^2+0.292^2) 0.652

Page 51: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

cosSim(d1,q) (0*0+0*0+0.584*0.584+0*0+0.584*0.292+0.584*0) / (1.011*0.652) 0.776

cosSim(d2,q) (0*0+0*0+0.584*0.584+1.584*0+0*0.292+0.584*0) / (1.786*0.652) 0.292

cosSim(d3,q) (1.584*0+1.584*0+0*0.584+0*0+0.584*0.292+0*0) / (2.316*0.652) 0.112

Page 52: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Douglass Cutting

LuceneNutch

Hadoop!

TikaSolr

ElasticSearch

Page 53: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Apache Lucene

150GB/hora 20%-30% tamanho do índice

Page 54: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 55: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 56: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

HTML, XHTML, OOXML, ODF, XML, RSS, OLE2, iWorks (Pages, Numbers, Keynote), PDF, EPUB, RTF, Commons Compress (ar, cpio, Unix dump, tar, zip, gzip, XZ, Pack200, bzip2, 7z, arj e lzma), Audio (javax.sound, MIDI, Mp3), Image (javax.imageio, Tiff, Jpeg), Video (FLV, Flash), Mail (Mbox, RFC822), DWG, Font (TrueType), HDF, e plugins.

Page 57: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

InputStream is = new BufferedInputStream( new FileInputStream( new File("sample.pdf"))); !Parser parser = new AutoDetectParser(); ContentHandler handler = new BodyContentHandler( System.out); !Metadata metadata = new Metadata(); !parser.parse(is, handler, metadata, new ParseContext()); !for (String name : metadata.names()) { String value = metadata.get(name); ! if (value != null) { System.out.println("Metadata Name: " + name); System.out.println("Metadata Value: " + value); } }

Page 58: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 59: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 60: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 61: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 62: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

http://localhost:8983/solr/query?q=title:black

Page 63: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

http://localhost:8983/solr/query? q=*:* &fl=id,title,series_s,pubyear_i &sort=pubyear_i desc &group=true &group.main=true &group.field=series_s &facet=true &facet.field=cat

Page 64: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

curl "http://localhost:8983/solr/update/extract?literal.id=doc5&defaultField=text” --data-binary @tutorial.html -H 'Content-type:text/html'

Page 65: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 66: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 67: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 68: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 69: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 70: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 71: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 72: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 73: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 74: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 75: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 76: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 77: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 78: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 79: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Solr ElasticSearch

Page 80: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Solr ElasticSearch

Coordination ZooKeeper Zen Discovery

Page 81: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Solr ElasticSearch

Coordination ZooKeeper Zen Discovery

Shard Splitting Sim Não

Page 82: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Solr ElasticSearch

Coordination ZooKeeper Zen Discovery

Shard Splitting Sim Não

Automatic Shard Rebalancing Não Sim

Page 83: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Solr ElasticSearch

Coordination ZooKeeper Zen Discovery

Shard Splitting Sim Não

Automatic Shard Rebalancing Não Sim

Schema + / - Sim

Page 84: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Solr ElasticSearch

Coordination ZooKeeper Zen Discovery

Shard Splitting Sim Não

Automatic Shard Rebalancing Não Sim

Schema + / - Sim

Nested Typing Não Sim

Page 85: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Solr ElasticSearch

Coordination ZooKeeper Zen Discovery

Shard Splitting Sim Não

Automatic Shard Rebalancing Não Sim

Schema + / - Sim

Nested Typing Não Sim

Queries Key / Value JSON

Page 86: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Solr ElasticSearch

Coordination ZooKeeper Zen Discovery

Shard Splitting Sim Não

Automatic Shard Rebalancing Não Sim

Schema + / - Sim

Nested Typing Não Sim

Queries Key / Value JSON

Distributed Group By Sim Não

Page 87: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Solr ElasticSearch

Coordination ZooKeeper Zen Discovery

Shard Splitting Sim Não

Automatic Shard Rebalancing Não Sim

Schema + / - Sim

Nested Typing Não Sim

Queries Key / Value JSON

Distributed Group By Sim Não

Percolation Queries Não Sim

Page 88: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 89: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 90: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 91: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 92: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 93: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 94: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 95: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 96: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Setup

cd ~ sudo apt-get update

sudo apt-get install openjdk-7-jre-headless -y

### http://www.elasticsearch.org/download/

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/

elasticsearch-0.90.7.deb

sudo dpkg -i elasticsearch-0.90.7.deb sudo service elasticsearch start

Page 97: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Setup

# Bonsai heroku addons:add bonsai heroku config:add ELASTICSEARCH_URL=`heroku config:get BONSAI_URL` !# Found heroku addons:add foundelasticsearch heroku config:add ELASTICSEARCH_URL=`heroku config:get FOUNDELASTICSEARCH_URL` !# SearchBox heroku addons:add searchbox:starter heroku config:add ELASTICSEARCH_URL=`heroku config:get SEARCHBOX_URL` !# reindex heroku run rake searchkick:reindex CLASS=Product

Page 98: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Setup

# Gemfile - bundle install gem "searchkick" !# app/models/product.rb class Product < ActiveRecord::Base searchkick end !# config/initializers/elasticsearch.rb ENV["ELASTICSEARCH_URL"] = "http://username:[email protected]" !# no shell rails r "Product.reindex"

Page 99: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

# Search simples products = Product.search "Camisetas" products.each do |product| puts product.name end

Page 100: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

# Search simples products = Product.search "Camisetas" products.each do |product| puts product.name end

# Search com campos Product.search "Camisetas", fields: [:name, :description] where: { in_stock: true, expires_at: {gt: 1.week.from_now}, or: [ [{in_stock: true}, {backordered: true}] ] }, order: {_score: :desc}, # relevant first limit: 10, offset: 50 # , page: params[:page], per_page: 20

Page 101: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

# Sinonimos class Product < ActiveRecord::Base searchkick synonyms: [ ["pc", "computador pessoal"], ["word", "microsoft office"] ] end

Page 102: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

# Sinonimos class Product < ActiveRecord::Base searchkick synonyms: [ ["pc", "computador pessoal"], ["word", "microsoft office"] ] end

# Sugestões class Product < ActiveRecord::Base searchkick suggest: ["name"] end !products = Product.search "coldminer ", suggest: true products.suggestions # ["codeminer"]

Page 103: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 104: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

class City < ActiveRecord::Base searchkick autocomplete: ["name"] end !City.search "Sao P", autocomplete: true

Page 105: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

# app/controllers/cities_controller.rb class CitiesController < ApplicationController def autocomplete render json: City.search(params[:query], autocomplete: true, limit: 10).map(&:name) end end

Page 106: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

# app/controllers/cities_controller.rb class CitiesController < ApplicationController def autocomplete render json: City.search(params[:query], autocomplete: true, limit: 10).map(&:name) end end

# partial <input type="text" id="query" name="query" /> !<script src="jquery.js"></script> <script src="typeahead.js"></script> <script> $("#query").typeahead({ name: "city", remote: "/cities/autocomplete?query=%QUERY" }); </script>

Page 107: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 108: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 109: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

products = Product.search "GPS", facets: [:type, :brand, :screen_size] puts products.facets

Page 110: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 111: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

class City < ActiveRecord::Base searchkick locations: ["location"] ! def search_data attributes.merge location: [latitude, longitude] end end !City.search "Codemi", where: { location: {near: [-23, -46], within: "10mi" } } # ou 16km

Page 112: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

Próximos Capítulos

Page 113: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 114: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:
Page 115: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

SELECT … LIKE ‘%'

Page 116: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

SELECT … LIKE ‘%'

Page 117: Como NÃO fazer pesquisas usando LIKE - Eventials · Como NÃO fazer pesquisas usando LIKE Fabio Akita @akitaonrails ... Cadeias de Markov ... --data-binary @tutorial.html -H 'Content-type:

OBRIGADO!slideshare.net/akitaonrailscodeminer42.com@akitaonrails