Portale di ricerca
per la ricerca viene usato un motore di ricerca lucene esposto via interfaccia http.
l'implementazione usata e' Clucene.
ogni azione e' accessibile attraverso un path distinto.
gli id e le query sono encodati in formato base64 variante fs-safe e url-safe, rfc4648 sez. 5 .
Contents |
Indicizzazione
il documento viene caricato in formato XML-RDF via metodo POST. il formato del documento e' di questo tipo: http://www.arkiwi.org/arav_cache/cGFub3JpL2ZhbGFmZWxleHByZXNzLm9nZw.xml
dove l'id del documento sara cGFub3JpL2ZhbGFmZWxleHByZXNzLm9nZw (about di rdf)
l'endopint e' http://pagliaio.arkiwi.org/index/ con due campi POST:
- 'id': l'id del documento (il path in base64)
- 'document': i metadati in xml (in base64 ?)
Cancellazione
accetta via metodo GET l'id del documento da cancellare
l'endopint e' http://pagliaio.arkiwi.org/delete/
- 'id': l'id del documento (il path in base64)
Aggiornamento
in lucene l'aggiornamento di un documento non esiste si fa cancellando e poi reindicizzando
data la frequenza dell'operazione vale la pena di fare un endpoint update che provvede a fare le due manovre.
l'endopint e' http://pagliaio.arkiwi.org/update/ con due campi POST identici a quelli di index:
Ricerca
accetta via metodo GET la query encodata in base64
torna lista degli id dei doc trovati
l'endopint e' http://pagliaio.arkiwi.org/search/
- 'query': la query lucene encodata in base64
Ottimizzazione
l'endopint e' http://pagliaio.arkiwi.org/optimize/
processamento delle query
le query hanno alcune features in piu rispetto alla sintassi lucene:
$query = str_replace("now", time(), $query);
$timeobjs = array("minute" => 60,
"hour" => 3600,
"day" => 86400,
"week" => 604800,
"month" => 2592999,
"year" => 31536000);
$query = preg_replace('/([\d]+?)([a-z]+?)ago/e','(time() - ("$1" * $timeobjs[$2]))', $query);
// separatori
$query = str_replace(",", " ", $query);
$query = str_replace("'", "\"", $query);