2013-02-13 71 views
0

我正在Jackrabbit存储库上实施全文搜索。在阅读http://jackrabbit.apache.org/ocm-search.html给出的示例之后,当谓词中只需要'和'时,我能够编写在存储库上执行全文搜索。例如:相当于JCR SQL2查询的OCM查询

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全文搜索的正确方法,其中谓词包含大量'和'和'或'条件。

回答

0

当我使用 filter.addLike('name','%def%');

它工作正常。我仍然想知道为什么addContains()不起作用。