0

我已限制某些页面(例如管理页面)在搜索结果中不可见。使用以下代码

map.put("group.1_group.1_property","**jcr:content/cq:template**");
map.put("group.1_group.1_property.1_value","**/apps/MyApp/templates/SampleTemplate**");


map.put("group.1_group.1_property.and","true");
map.put("group.1_group.1_property.operation","unequals");

 final  Query finalQuery = builder.createQuery(PredicateGroup.create(map),
                    session);

这意味着它是特定于模板的搜索过滤,意味着我告诉查询生成器不要显示具有上述指定模板的那些页面。但是缺点是,将来如果我们想限制更多页面,这些页面也必须映射到上面的模板。因此,我们可以在 map 中放置任何其他属性,而不是在 map 中指定模板,以便搜索限制不是特定于模板的。谢谢, 巴拉吉

4

1 回答 1

1

您的页面还有哪些其他可用属性(特别是管理页面)?例如,如果您有一个特定的属性添加到您的管理页面或您可以排序的其他页面,这可能会起作用。在我工作的一个网站上,我们有一个属性,我们将其放入某些名为 hideInNav 的内容项中。因此,按照这些思路,这就是我的做法:

map.put("group.1_group.1_property","jcr:content/hideInNav");
map.put("group.1_group.1_property.1_value","/content/somepath/you/want");

map.put("group.1_group.1_property.and","true");
map.put("group.1_group.1_property.operation","unequals");

我希望这有助于理解它。我理解正确吗?如果没有,请澄清,我会尽力提供更多帮助。

- - - - - - - -编辑 - - - - - - - - - - - -

如果您没有自定义属性,但您知道这些页面所在的路径,可能还有它们共有的默认属性(如 jcr:title),您可以尝试这样做。像这样:

map.put(1_group.0_path","/content/yoursite");
map.put(2_group.0_type","cq:Page");
map.put(3_group.fulltext","test text");
map.put(3_group.fulltext.relPath","jcr:content/@jcr:title");

当您运行 CQ 时,您可以看到这将如何在本地查询调试器上运行:

http://localhost:4502/libs/cq/search/content/querydebug.html?_charset_=UTF-8&query=http%3A%2F%2Flocalhost%3A4502%2Fcontent%2Fsalesportal%2Fen%2Fmobile%2Fresources.assets.get.json%3Fp.limit%3D7%0D%0A1_group.0_path%3D%2Fcontent%2Fyoursite%0D%0A2_group.0_type%3Dcq%3APage%0D%0A3_group.fulltext%3Dtest+text%0D%0A3_group.fulltext.relPath%3Djcr%3Acontent%2F%40jcr%3Atitle

希望这更有帮助。

编辑#2

这是我两个答案的摘要,希望也能回答您的最后评论。

为了更全面地回答你的问题(因为你还没有完全得到你想要的东西),我挖得更深一点来找到你需要的信息。作为参考,任何时候进行 XPath 查询时,这都是一个很好的工具:JCR Query Usecases - jboss

无论如何,您说您得到的结果不包括缺少“hideInNav”属性的项目。以下是获得这些结果的方法,特别是:

map.put("1_group.0_path","/content/yoursite");
map.put("2_group.0_type","cq:Page");
map.put("3_group.1_property","jcr:content/hideInNav");
map.put("3_group.1_property.1_value","not");
map.put("3_group.1_property.operation","not");

这样,您将在您想要的路径中搜索,获得您想要的结果类型(cq:Page,如果那是您真正要寻找的),并且您将获得没有该属性的结果'隐藏导航'。

于 2013-04-18T18:45:35.853 回答