E' possibile effettuare una query sul catalogo di Plone, usando più volte
(in AND) lo stesso indice?
Nel seguito spiego la domanda descrivendo un problema che ho per le mani.
Forse dovrei fare questo post ad una mailing-list di plone.org.
Ma provo prima con la comunità italiana. Se non altro faccio prima ad
esprimermi.
LA SITUAZIONE DI PARTENZA
In un'applicazione, tra i vari contenuti ho
- un insieme di pubblicazioni
- tre thesauri - chiamiamoli T1, T2 e T3 -, usati per classificare le
pubblicazioni.
Ogni thesaurus è composto da termini organizzati gerarchicamente ad albero.
Ogni pubblicazione è classificata con un certo numero di termini (da 0 a N)
presi da diversi thesauri (da 0 a 3).
Pubblicazioni e termini sono archetypes.
La classificazione è implementata mediante references da pubblicazione a
termine del thesaurus.
Chiamo R1, R2 ed R3 le relazioni usate per le references verso i diversi
thesauri.
Uso campi ReferenceField RF1, RF2 e RF3 con attributi
- multiValued=1
- index="KeywordIndex"
e quindi Archetypes mi crea i relativi indici getRawRF1, getRawRF2,
getRawRF3, del tipo KeywordIndex.
Il prefisso Raw sta a indicare che in realtà la ricerca va fatta passando
come valori non i termini dei thesauri ma i loro UID (identificatori unici
in Archetypes).
Per comodità definisco anche degli indici derivati (che registro con la
funzione registerIndexableAttribute del CatalogTool)
- getRawTerms, che per ogni pubblicazione mi indicizza i termini con cui è
classificata, appartenenti a qualsiasi thesaurus
- getRawAncestorTerms, simile al precedente, che indicizza non solo i
termini con cui una pubblicazione è classificata direttamente, ma anche
tutti i termini che ne costituiscono delle generalizzazioni.
Questo mi consente di fare delle ricerche (mediante form di ricerca e pagine
di navigazione)
- a partire anche da termini piuttosto generali
- utilizzando un solo indice per tutti e tre i thesauri.
Quindi la query mi prende in OR non solo termini appartenenti allo stesso
thesaurus, ma tutti i termini elencati passati nel criterio di ricerca.
PROBLEMA
In certi casi, vorrei fare delle ricerche di pubblicazioni
- a partire anche da termini generali
- ma ponendo in AND, nel criterio di ricerca, termini appartenenti a
thesauri diversi.
La soluzione "interna" più ovvia sarebbe quella di creare un indice derivato
(che indicizzi anche i termini più generali) a fronte di ciascun thesaurus.
Ma io vorrei evitarlo, dato che già ora ogni pubblicazione viene indicizzata
3 volte, e la manutenzione di un indice che tenga conto dei termini più
generali è già abbastanza pesante.
Una soluzione "esterna" sarebbe quella di usare un prodotto del tipo di
AdvancedSearch, che dovrebbe consentire delle query con struttura AND/OR
esplicita.
Però non ho mai usato AdvancedSearch, so che ha un certo numero di
dipendenze, non credo che sia una scelta coerente con l'evoluzione di Plone.
DOMANDA
Ovviamente non posso passare al catalogo (metodo searchResults) un dict in
cui più elementi abbiano la stessa key.
Ma c'è una limitazione intrinseca al fatto che in una query più criteri di
ricerca non possono fare riferimento allo stesso indice?
O intervenendo a qualche livello, magari con una semplice patch che mi
supporti degli "alias", potrei riuscire a superare la limitazione?
Oppure qualcuno ha qualche altro approccio da suggerirmi?
Grazie.
Giovanni
--
Giovanni Toffoli
Link srl
Via Udine 30 - 00161 Roma
tel +39 06 44231115, +39 340 0727780
_______________________________________________
Plone-IT mailing list
Plone-IT@lists.plone.org
http://lists.plone.org/mailman/listinfo/plone-it
http://www.nabble.com/Plone---Italy-f21728.html