2011-11-01 11 views
7

Voglio eseguire una ricerca nel repository di contenuti utilizzando uno o più valori come parametro di input per una proprietà multivalore Qualcosa di simile: trova tutti i nodi con il tipo primario 'nt: non strutturato' di cui la proprietà 'multiprop' (proprietà multivalore) contiene entrambi i valori "uno" e "due".JCR SQL2 Ricerca proprietà multivalore

In che modo la queryString passata a queryManager.createQuery dovrebbe essere simile?

Grazie.

risposta

13

È possibile trattare i criteri su proprietà multivalore come altri criteri. Ad esempio, la seguente query troverà tutti i nodi che hanno un valore di 'cane bianco' sul 'someProp' immobile:

SELECT * FROM [nt:unstructured] WHERE someProp = 'white dog' 

Se la proprietà del 'someProp' ha più valori, poi un nodo con almeno un il valore che soddisfa i criteri sarà incluso nei risultati.

Per trovare nodi che hanno più valori di una proprietà multivalore, semplicemente AND insieme a più criteri. Ad esempio, la seguente query restituirà tutti i nodi che hanno entrambi i valori specificati:

SELECT * FROM [nt:unstructured] WHERE someProp = 'white dog' 
            AND someProp = 'black dog' 

Qualsiasi degli operatori funzionerà, compreso 'COME':

SELECT * FROM [nt:unstructured] WHERE someProp LIKE '%white%' 
            AND someProp LIKE '%black%' 

Sono possibili altre combinazioni, di corso.

+1

Grazie. Domande, per favore: quale è quella soluzione che è più performante? O dovrebbero essere identici in termini di prestazioni? – silverb77

+0

Ora, prima di ottenere la risposta ho provato qualcosa come someProp LIKE '% black%' e sembra piuttosto lento ... È perché stavo usando LIKE invece di =? – silverb77

+0

Domanda finale per favore: pensando alle prestazioni, preferiresti fare una ricerca "manuale" usando getNode e controllando i valori di ciascuna proprietà rispetto al parametro di input o eseguiresti JCR SQL2 SELECT? Grazie molto. – silverb77

Problemi correlati