Поиск многозначных свойств JCR SQL2

Я хочу выполнить поиск в репозитории контента, используя одно или несколько значений в качестве входного параметра для свойства с несколькими значениями. Что-то вроде: найти все узлы с основным типом «nt: unstructured», чье свойство «multiprop» (свойство с несколькими значениями) содержит оба значения "один" и "два".

Как должна выглядеть строка queryString, переданная в queryManager.createQuery?

Спасибо.


person silverb77    schedule 01.11.2011    source источник


Ответы (1)


Критерии многозначных свойств можно обрабатывать так же, как и другие критерии. Например, следующий запрос найдет все узлы со значением «белая собака» в свойстве «someProp»:

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

Если свойство someProp имеет несколько значений, то в результаты будет включен узел хотя бы с одним значением, удовлетворяющим критериям.

Чтобы найти узлы, которые имеют несколько значений многозначного свойства, просто объедините несколько критериев. Например, следующий запрос вернет все узлы, которые имеют оба указанных значения:

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

Подойдет любой из операторов, включая LIKE:

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

Возможны, конечно, и другие комбинации.

person Randall Hauch    schedule 01.11.2011
comment
Спасибо. Вопросы, пожалуйста: какое из этих двух решений более производительно? Или они должны быть одинаковыми по производительности? - person silverb77; 02.11.2011
comment
Теперь, прежде чем получить ответ, я попробовал что-то вроде someProp LIKE '%black%', и это кажется довольно медленным ... Это потому, что я использовал LIKE вместо = ? - person silverb77; 02.11.2011
comment
Последний вопрос, пожалуйста: думая о производительности, вы бы предпочли выполнить ручной поиск, используя getNode и сверив значения каждого свойства с входным параметром, или вы бы сделали JCR SQL2 SELECT? Большое спасибо. - person silverb77; 02.11.2011
comment
Подробнее о том, как выполняется сравнение, можно узнать здесь: день. com/specs/jcr/2.0/6_Query.html#6.7.16%20Сравнение - person michid; 03.11.2011
comment
Использование оператора LIKE всегда будет медленнее, чем использование оператора '=', потому что он должен выполнять гораздо больше работы. IIRC, начальный «%» медленнее, чем если бы у вас был только конечный «%». - person Randall Hauch; 07.11.2011
comment
Спасибо, Рэндалл и Мичид за полезную информацию. - person silverb77; 08.11.2011