Integrare Apache Solr in TYPO3

Post on 27-Jun-2015

405 views 9 download

description

Un'introduzione ai motori di ricerca nativi di TYPO3 e presentazione dei loro limiti. Presentazione di Apache Solr e delle modalità di integrazione in TYPO3

Transcript of Integrare Apache Solr in TYPO3

Milano 14/15 Marzo 2014

Ricerche evolute mediante Apache Solr Mauro Lorenzutti

T3Camp Italia Il quarto evento italiano dedicato a TYPO3

Mauro Lorenzutti

CTO di Webformat

Sviluppatore e consulente TYPO3 dal 2004

TYPO3 Certified Integrator dal 2009

Sviluppatore di numerose estensioni, tra cui: DB Integration (wfqbe)

Webformat Shop System (extendedshop)

TYPO3-Alfresco Connector

TYPO3-Magento Connector

Speaker in varie conferenze: T3DD07

T3CON07

T3CON09US

Pag. 2 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

T3CON13DE

MageDay

4 x T3CampItalia ;-)

Di cosa parleremo

La ricerca integrata di TYPO3

Indexed Search Engine

Introduzione ad Apache Solr

Integrare Solr in TYPO3

Pag. 3 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

50 slide… Tutti pronti?

Pag. 4 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Io si!

La ricerca nei siti

Molto spesso trascurata e sottovalutata

Ma…

Se ho un database con >100k eventi?

Se ho un catalogo con 20k prodotti strutturato in categorie e con caratteristiche sulla base delle quali vorrei che gli utenti potessero filtrare i prodotti?

Pag. 6 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

La ricerca standard di TYPO3

Pag. 7 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Un contenuto standard

Pag. 8 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Le funzionalità della ricerca standard

Consente all’utente di scegliere se cercare nelle keyword della pagina o nel contenuto

Consente di configurare più tabelle via typoscript

Output configurabile via typoscript

La ricerca si basa sul operatore “LIKE %...%”

Pag. 11 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Pro & Contro della ricerca standard

Pag. 12 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

+ Integrata + Facile da configurare

- Funzionalità di base - Cerca solo nel database - LIKE %...%

Indexed Search Engine

Pag. 13 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Un’estensione di sistema

Pag. 14 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Indice

Pag. 16 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Statistiche

Pag. 17 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Le funzionalità della ricerca standard

Consente di indicizzare pagine, record nel database, documenti, immagini, url esterni, ecc.

Costruisce un indice di parole chiave per ciascun contenuto ed esegue la ricerca su questo

Fornisce una percentuale di pertinenza del risultato

I contenuti vengono indicizzati contestualmente alla prima visualizzazione

È disponibile un crawler per indicizzare massivamente il sito

Pag. 18 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Pro & Contro di Indexed search engine

Pag. 21 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

+ Integrata + Indicizza pagine, record, file, url, … + Ordinamento per rilevanza + Statistiche di ricerca + Molte estensioni disponibili

- Configurazione non immediata - Può rallentare la navigazione - Solo le pagine in cache vengono indicizzate - Indice salvato nel db (problemi di prestazioni)

Pag. 22 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Apache Solr?

• SolrTM is the popular, blazing fast open source enterprise search platform from the Apache LuceneTM project. Its major features include powerful full-text search, hit highlighting, faceted search, near real-time indexing, dynamic clustering, database integration, rich document (e.g., Word, PDF) handling, and geospatial search. Solr is highly reliable, scalable and fault tolerant, providing distributed indexing, replication and load-balanced querying, automated failover and recovery, centralized configuration and more. Solr powers the search and navigation features of many of the world's largest internet sites. https://lucene.apache.org/solr/

Pag. 23 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Download

Download:

http://www.apache.org/dyn/closer.cgi/lucene/solr/4.7.0

Apache License, versione 2.0

http://www.apache.org/licenses/LICENSE-2.0

Requisiti:

Java 1.6

Un application server (Tomcat, Jetty, JBoss, ecc.)

Pag. 24 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Ma cos’è Apache Solr?

Solr è un “enterprise search server”

Espone delle API REST per l’interazione

Vi si possono caricare documenti (ovvero qualsiasi tipo di contenuto) via XML, JSON e CSV tramite chiamate HTTP

Si possono cercare e scaricare documenti in formato XML, JSON e CSV tramite chiamate HTTP

Un database NoSQL?

Pag. 25 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Funzionalità principali

Ricerche Full-text

Faceted navigation

Spellchecking: “Did you mean…”

Raccomandazioni: “More like this”

Indicizzazione di documenti (PDF, DOC, ecc.)

Gestione dei sinonimi e delle stopword

Ricerche geospaziali

Ottimizzato per elevato traffico e mole di dati

Estendibile mediante plugin

Pag. 26 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Schemaless

Permette di definire dinamicamente i campi che descrivono il documento

Pag. 27 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Interfaccia di amministrazione

Pag. 28 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Come integrarlo in TYPO3?

Due possibilità:

Apache Solr for TYPO3 (ext: solr)

DIY (ext: arrangiati)

Pag. 29 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Apache Solr for TYPO3

Pag. 30 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

DIY

Sono disponibili diversi client PHP, ad es.:

http://www.solarium-project.org/

https://code.google.com/p/solr-php-client/

Due soluzioni “quick and dirty”:

cURL

file_get_contents()

Pag. 31 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

DIY

Costruiamo un esempio molto semplice

Indicizziamo le news del nostro sito

Implementiamo una funzionalità di ricerca

Costruiamo dei filtri a faccette

Pag. 32 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Configuriamo il core

core.properties

name=news

config=solrconfig.xml

schema=schema.xml

loadOnStartup=true

Pag. 33 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

solrconfig.xml

[…]

<requestHandler name="/newsImporter" class="org.apache.solr.handler.dataimport.DataImportHandler">

<lst name="defaults">

<str name="update.chain">data-extraction</str>

<str name="config">newsImporter.xml</str>

</lst>

</requestHandler>

[…]

Pag. 34 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

newsImporter.xml

<dataConfig>

<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/typo3_61?user=typo3_61&amp;password=typo3_61" batchSize="1" />

<document name="news_document">

<entity name="news" pk="uid" transformer="script:GenerateId" query="SELECT uid, pid, title, teaser, bodytext, keywords, author FROM tx_news_domain_model_news WHERE deleted=0 AND hidden=0">

</entity>

</document>

</dataConfig>

Pag. 35 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

schema.xml 1/3

<schema name="typo3_news" version="1.1">

<types>

<fieldtype name="string" class="solr.StrField" />

<fieldType name="long" class="solr.TrieLongField" />

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">

<analyzer>

<charFilter class="solr.MappingCharFilterFactory" mapping="mappa- accenti.txt"/>

<tokenizer class="solr.StandardTokenizerFactory" />

<filter class="solr.LowerCaseFilterFactory" />

</analyzer>

</fieldType>

</types>

Pag. 36 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

schema.xml 2/3

<fields>

<field name="uid" type="long" indexed="true" stored="true" multiValued="false" required="true" />

<field name="title" type="text_general" indexed="true" stored="true" multiValued="false" />

<field name="teaser" type="text_general" indexed="true" stored="true" multiValued="false" />

<field name="bodytext" type="text_general" indexed="true" stored="true" multiValued="false" />

<field name="author" type="string" indexed="true" stored="true" multiValued="false" />

<field name="keywords" type="string" indexed="true" stored="true" multiValued="false" />

Pag. 37 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

schema.xml 3/3

<field name="_version_" type="long" indexed="true" stored="true" multiValued="false" />

<field name="fullText" type="text_general" indexed="true" stored="true" multiValued="true" />

<copyField source="title" dest="fullText" />

<copyField source="teaser" dest="fullText" />

<copyField source="bodytext" dest="fullText" />

<copyField source="author" dest="fullText" />

<copyField source="keywords" dest="fullText" />

</fields>

<defaultSearchField>fullText</defaultSearchField>

<solrQueryParser defaultOperator="OR" />

<uniqueKey>uid</uniqueKey>

</schema>

Pag. 38 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

DataImport

Pag. 39 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Interroghiamo l’indice

http://localhost:8983/solr/news/select? q=fullText:celebr* &wt=json &indent=true &facet=true &facet.field=author &facet.sort=index

Pag. 40

Facciamolo da TYPO3

Pag. 41 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Setup.txt

Pag. 42 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

NewsSolrController.php

Pag. 43 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

SolrService.php 1/2

Pag. 44 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

SolrService.php 2/2

Pag. 45 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Search.html

Pag. 46 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Un dettaglio:

Pag. 47 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Pro & Contro di Apache Solr

Pag. 48 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

+ Tante tante tante tante funzionalità! + Adatto a gestire elevati volumi di dati + Molto veloce

- Non integrato in TYPO3 - Impegnativo da configurare - Richiede Java - C’è molto da studiare… - Può creare dipendenza

Alcuni libri utili

Pag. 49 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr

Q & A

mauro.lorenzutti@webformat.com

http://it.linkedin.com/in/maurolorenzutti

https://twitter.com/MauroLorenzutti

http://www.slideshare.net/mauro.lorenzutti

Pag. 50 Mauro Lorenzutti: Ricerche evolute mediante Apache Solr