Запрос OCM эквивалентен запросу JCR SQL2

Я реализую полнотекстовый поиск в репозитории Jackrabbit. После изучения примеров, приведенных на http://jackrabbit.apache.org/ocm-search.html, я могу выполнить полнотекстовый поиск в репозитории, когда в предикате требуется только «и». Например:

select * from test where name like '%abc%' and type = 'mainPage' and language = 'english'

можно записать как

Filter filter = queryManager.createFilter(Paragraph.class);
filter.addContains('name', 'abc');
filter.addEqualTo('type', 'mainPage');
filter.addEqualTo('language ', 'english');

Но если я попытаюсь написать реализацию OCM для следующего запроса

select * from test where (name like '%abc%' or name like '%def%' ) and type = 'mainPage' and language = 'english'

как указано ниже, я получаю пустой список

Filter mainFilter= queryManager.createFilter(Paragraph.class);
Filter filter = queryManager.createFilter(Paragraph.class);
filter.addContains('name', 'abc');
Filter filter1 = queryManager.createFilter(Paragraph.class);
filter.addContains('name', 'def');
mainFilter = filter .addOrFilter(filter1 );
mainFilter .addEqualTo('type', 'mainPage');
mainFilter .addEqualTo('language ', 'english');

Я думаю, что не могу правильно использовать полнотекстовый поиск OCM. Пожалуйста, предложите мне правильный способ реализации полнотекстового поиска OCM, в котором предикат содержит большое количество условий «и» и «или».


person Vaibhav Raj    schedule 13.02.2013    source источник


Ответы (1)


Когда я использовал filter.addLike('name','%def%');

Это работает нормально. Мне все еще интересно, почему addContains() не работает.

person Vaibhav Raj    schedule 19.02.2013