Amazon CloudSearch un sistema di ricerca per le applicazioni
da Massimo Della Rovere · pubblicato il 8 agosto, 2014 · modificato il 5 giugno, 2017

Anche se in apparenza creare un motore di ricerca per le proprie applicazioni web può sembrare una cosa abbastanza semplice in realtà è una delle operazioni più difficili da sviluppare in assoluto. Proprio per questo anche prodotti molto conosciuti e sviluppati da grandi community come WordPress, Drupal, Joomla etc, etc, nonostante le numerose funzioni hanno sempre un motore di ricerca scadente.

Un’altra conseguenza legata alla complessità di creare un motore di ricerca interno è che molti sviluppatori utilizzano dei servizi esterni come Google, Bing e Yahoo per ottenere i risultati dalle query dei motori di ricerca. Però questa tecnica ha due grossi svantaggi, il primo riguarda il limite di non permettere query su pagine e contenuti privati, il secondo che i risultati sono poco personalizzabili sull’aspetto grafico.

Introduzione

Il servizio di ricerca CloudSearch presente negli Amazon Web Services nasce proprio per eliminare lo sviluppo di complicati algoritmi e la configurazione di ambienti scalabili molto difficili da realizzare. Tramite questo servizio tutti questi aspetti vengono gestiti automaticamente dal servizio e gli sviluppatori devono solo pensare a creare un dominio di ricerca, aggiungere i dati ed essere pronti ad eseguire le query.

Cloudsearch

Tutte queste funzionalità possono essere gestite dalla management console per creare i domini di ricerca ed eseguire i primi upload, ma è possibile utilizzare le API e i vari SDK per implementare nelle nostre applicazioni l’aggiornamento automatico di questi dati e creare i form di ricerca necessari alla nostra applicazione. Nel proseguimento di questo articolo vedremo insieme i passi principali per creare un motore di ricerca.

Per quanto riguarda la qualità del servizio di ricerca non è necessario entrare troppo nei dettagli ma basta pensare che gli algoritmi e le tecniche usate sono le medesime che vengono utilizzate dal sito amazon.com che come sapete mette a disposizione un numero notevole di prodotti ed elabora milioni di query giornaliere. Come al solito la referenza più grande degli Amazon Web Service è proprio Amazon stessa.

Dominio di ricerca e istanze

Ogni collezione dati su cui costruire un motore di ricerca deve essere contenuto in un dominio di ricerca. Ogni dominio di ricerca può essere gestito da una o più istanze in base alla potenza di calcolo necessaria e alla mole di dati da memorizzare. Quando si crea un nuovo dominio di ricerca verrà indicata un’istanza (search.m1.small) per default ma sarà possibile cambiarla secondo le proprie esigenze di calcolo.

In ogni caso Amazon CloudSearch esegue automaticamente la scalabilità del dominio di ricerca sia aumentando le istanze ma anche diminuendole quando non servono più, può anche dividere gli indici in diverse istanze in base all’occupazione di spazio dei dati che vengono caricati nell’indice di ricerca. La stessa scalabilità viene eseguita anche rispetto alla densità del traffico per garantire sempre delle buone performance. Per chiarire meglio vi allego una schema con il processo di scalabilità CloudSearch:

Cloudsearch

È sempre possibile tenere sotto controllo il consumo delle risorse e i costi addebitati dal servizio CloudSearch tramite la management console, la quantità dei dati e il tipo di istanza dipendono molto dalla dimensione del singolo documento che dovrà essere memorizzato in formato JSON o XML. Amazon riporta nella documentazione ufficiale un documento di esempio IMDb contenente informazioni su un film, se si prende come base questo tipo di memorizzazione la capacità di una singola istanza è la seguente:

Tipo di instanza Capacità
Instanza (search.m1.small) 2 milioni di documenti
Instanza (search.m1.large) 8 milioni di documenti
Instanza (search.m2.xlarge) 16 milioni di documenti
Instanza (search.m2.2xlarge) 32 milioni di documenti

Ovviamente i dati riportati sono indicativi e possono cambiare drasticamente in base al documento usato come unità di memorizzazione, in ogni caso se si supera la capacità legata ad una istanza extra-grande doppia, il servizio CloudSearch aggiungerà fino a 9 istanze contemporanee che sono sufficienti a memorizzare e servire diversi milioni di documenti, se questo non dovesse bastare bisogna chiamare il supporto.

Servizio di ricerca

Una volta attivato un dominio di ricerca è possibile effettuare delle query che generano dei risultati in formato JSON e XML. Ogni dominio di ricerca viene associato ad un URL univoco che è possibile utilizzare nelle proprie applicazioni, lo stesso end-point può essere usato anche per aggiornare l’indice e aggiungere nuovi documenti alla ricerca.

Amazon CloudSearch mette a disposizione un “query language” per eseguire le ricerche con specifici campi, eseguire complesse ricerche booleane, reperire informazioni e specificare il formato dei dati che si vogliono ottenere di ritorno. È possibile indicare le opzioni di controllo che riguardano le query sui termini e i parsers come Lucene. Nella management console esiste anche una pagina per effettuare delle query di test.

Ogni risultato di ricerca viene rappresentato da un ID documento univoco, il quale può contenere diversi campi che possono essere specificati del formato di ritorno, tutti i campi devono contenere delle stringe UTF-8 e ogni campo può essere indicizzato se viene specificata la richiesta di indicizzazione nella pagina di configurazione.

Creazione dominio

Per creare il nostro primo dominio di ricerca andiamo nella nostra management console e selezioniamo il servizio CloudSearch, se non abbiamo nessun dominio esistente verrà presentata una schermata con un tasto di “create domain”. Una volta premuto il tasto di creazione passiamo alla prima fase dei parametri da inserire:

Cloudsearch

Inseriamo un nome di dominio e lasciamo le altre opzioni di default, vedremo i dettagli delle istanze e delle repliche con articoli più dettagliati che dedicheremo al servizio di Amazon CloudSearch. Premiamo il tasto “next” per passare alla prossima fase dedicata al caricamento dei dati iniziali tramite diverse maniere di upload:

Cloudsearch

Possiamo caricare un file dalla postazione locale, da Amazon S3, archiviato su DynamoDB o passare alla configurazione manuale per descrivere i campi e aggiungere i documenti successivamente con altre procedure. I formati standard devono essere JSON e/o XML, però durante il caricamento iniziale sono consentiti anche altre formati come Excel, CSV, PDF etc, i quali verranno convertiti automaticamente.

Una volta terminata la fase di upload si passerà automaticamente alla schermata per la definizioni degli indici in base ai campi caricati nel file di upload. È possibile inserirne anche di nuovi o cancellarne alcuni. Utilizzare le chiavi solo per i campi utilizzabili dalle ricerche, in quanto occupano spazio e si potrebbe necessitare di istanze più grandi.

Cloudsearch

Una volta definite le chiavi possiamo definire le policy di accesso e confermare l’ultima schermata di riepilogo. Sugli accessi al momento non usate regole troppo restrittive, tanto il dominio di ricerca ci serve solo per effettuare alcuni test. L’avvio del servizio non è immediato ma si necessitano circa 10 minuti per avere l’ambiente pronto all’uso.

Cloudsearch

Fino a quando non appare la scritta ACTIVE in color verde vicino al nome del dominio di ricerca non eseguite nessuna operazione presente nel menu. In questa videata potete vedere le informazioni che riguardano gli endpoint associati al nostro dominio di ricerca e il tipo di istanza che stiamo utilizzando in questo momento.

Operazioni disponibili

Nella schermata precedente potete vedere sulla sidebar laterale una serie di operazioni che è possibile eseguire sul nostro dominio di ricerca. Non sarà possibile approfondire tutti i punti di menu in questo articolo ma pubblicheremo sicuramente degli articoli più specifici. Vi elenchi qui di seguito una piccola descrizione delle varie azioni:

Run a Text Search: viene messo a disposizione un semplice form per testare le query di ricerca ed analizzare i risultati, è possibile anche inserire delle opzioni avanzate come ad esempio la selezione dei campi su cui effettuare la ricerca, il metodo usato, etc etc.

Access Policies: è possibile specificare le autorizzazioni di accesso al nostro dominio di ricerca, la configurazione consigliata è permettere a tutti il servizio di ricerca e bloccare completamente il servizio documenti ad eccezione del nostro indirizzo IP.

Availability Options: in questa sezione al momento si trova la possibilità di attivare la modalità Multi-AZ (available zone) che permette di avere delle istanze attive nelle altre zone di disponibilità. Per default l’opzione è disattiva perché prevede costi aggiuntivi.

Indexing Options: selezionando questo menu è possibile visionare i campi che vengono usati come chiavi, è possibile aggiungerne altri o rimuovere quelli che non si vuole più indicizzare. Ricordarsi che gli indici necessitano di memoria e consumano risorse.

Scaling Options: durante la fase di avvio del dominio abbiamo lasciato nella sezione della scalabilità i valori di default, tramite questa sezione è possibile personalizzare le caratteristiche del nostro dominio di ricerca sul tipo di istanza e la replica dei dati.

Suggesters: in questa sezione possiamo aggiungere dei suggerimenti che saranno legati ad un campo di ricerca. Per ogni suggerimento dovremmo specificare un nome, il campo di riferimento, il tipo di matching e l’espressione di ordinamento (sort).

Guida completa su AWS

Questo articolo appartiene ad una serie di pubblicazioni che costituiscono una guida completa dedicata agli Amazon Web Services.  Molti servizi che trattiamo in questo blog vengono anche spiegati con dei video che trovate nel nostro canale youtube. Se volete seguire questo percorso didattico iscrivetevi alla community Cloud AWS.

1 Commento

  1. Ho usato questo servizio in un progetto rilasciato da qualche mese. Devo dire che sono molto soddisfatto del risultato, all'inizio la fase di configurazione sembrava difficile, invece passata la prima difficoltà si è relevato un servizio facilissimo e molto affidabile. Ho convertito circa 6 milioni di documenti senza nessun problema. L'unica cosa negativa a parer mio è la fase di indexing che ogni volta che si modifica qualche parametro va rieseguita completamente.

condividi