OCM Query等同于JCR SQL2查询

时间:2013-02-13 14:44:29

标签: jackrabbit jcr-sql2

我正在Jackrabbit Repository上实现全文搜索。在完成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全文搜索的正确方法,其中谓词包含大量“和”和“或”条件。

1 个答案:

答案 0 :(得分:0)

我用的时候     filter.addLike( '姓名', '%DEF%');

工作正常。我仍然想知道为什么addContains()无效。