Sitecore快速查询获取后代查询语法不一致

时间:2014-12-16 16:10:29

标签: sitecore

我遇到了一个以前为Sitecore 6.4编写的旧项目,现在更新为Sitecore 7.2。

有一个快速查询不返回结果:

1. fast:/sitecore/content/Home/About Us/News//*[@@templatename='Newsletter']

我试图调整查询,这两个工作正常:

2. fast:/sitecore/content/Home/About Us/News/descendant::*[@@templatename='Newsletter']

3. fast:/sitecore/content/Home/About Us/News/Newsletters//*[@@templatename='Newsletter'] 

Newsletter项目也不是Newsletters项目的直接子项,中间还有另一层。

那么为什么查询1在2& 3准确回报我需要的东西?

2 个答案:

答案 0 :(得分:4)

  • 检查FastQueryDescendantsDisabled的web.config设置。
  • 通过控制面板,数据库,清理数据库重建您的后代表

参考:http://sdn.sitecore.net/upload/sdn5/developer/using%20sitecore%20fast%20query/using%20sitecore%20fast%20query001.pdf

答案 1 :(得分:0)

检查“新闻”的后代数是否在Web配置(<setting name="Query.MaxItems" value="100" />)中设置的最大返回项目大小之下。

虽然您在查看后代时没有返回项目,但旧版本的Sitecore可能只查看最大项目数(这将是一个错误)。查询3工作而查询1不工作的事实告诉我,这可能是问题所在。查询2试图做同样的事情,但查询1和3也恰好是相同的语法。因为这三个都是为了做同样的事情(唯一的例外是/News/Newsletters从更深的根项目看),我希望这是一个bug。

您可以通过将Query.MaxItems设置的值设置为一个非常高的数字(例如5000)进行测试(请注意,您应该在测试后将值更改回来,因为这会极大地降低性能)。如果查询1现在返回项目,那么这是您的问题。否则,请尝试将值设置得更高。如果之后仍然没有返回值,那么这不是你的问题。


如果您有任何疑问,请告诉我。祝你好运,编码愉快! :)