首页 文章

使用SPServices查询大型列表并避免列表视图阈值...功能

提问于
浏览
3

所以我有一个列表,里面有数以万计的项目,我需要在使用SPServices时执行查询 . 阈值设置为8,000,所以我遇到了问题 .

到目前为止,我已经尝试通过将项目放入文件夹并索引我将在查询中使用的列来优化列表 .

似乎让它工作的唯一真正技巧是通过正确索引列:但即使列索引,我仍然有问题:

如果我索引列“Keyword1”和“Keyword2”我可以查询列表就好了如果我只在查询中使用其中一个字段,但只要我在Where子句中包含它们和Or谓词,我得到门槛错误 .

这里的最后几句话突出显示了问题http://msdn.microsoft.com/en-us/library/ff798465.aspx“在这种情况下,您可以通过索引 Headers 字段来避免此问题 . 这将使SharePoint能够确定按索引 Headers 排序的前100个项目,而不扫描所有10,000个列表项目数据库. The same concepts that apply to sort operations also apply to where clauses and join predicates in list queries. 仔细使用列索引可以缓解许多大型列表性能问题,并帮助您避免查询限制限制 . “

如何以这样的方式索引列,以便我可以执行更复杂的查询,例如:

<Query><Where><Or><Eq><FieldRef Name='Keyword1' /><Value Type='Text'>TEST1</Value></Eq><Eq><FieldRef Name='Keyword2' /><Value Type='Text'>TEST2</Value></Eq></Or></Where></Query>

我尝试了很多选择 . 我认为有希望的是通过在查询中指定ViewName或FolderName来查询单个文件夹,但这似乎没有绕过阈值错误 .

任何提示或替代方案?

1 回答

  • 1

    您是否尝试将列表阈值增加到更高的值?

    解决方法是“通过将SPList.EnableThrottling属性设置为false来覆盖单个列表的列表视图阈值 .

    private static void DisbaleListThrottling()
            {
               using (SPSite spSite = new SPSite("http://YourSiteNameHere.com/TeamSite/"))
                {
                    using (SPWeb spWeb = spSite.OpenWeb())
                    {
                        SPList spList = spWeb.Lists["MyList1"];
                        spList.EnableThrottling = false;
                        spList.Update();
                    }
               }
            }
    

    你也可以使用powershell: -

    $web = Get-SPWeb http://whateverWeb
    
    $list = $web.Lists[“List Title”]
    
    $list.enablethrottling = $false
    
    $lst.update()
    

相关问题