我使用Sitecore PowerShell Extensions模块创建脚本,将关系从一个项目复制到相关项目。
我使用Get-ChildItem
来获取与特定字段有关系的所有项目
Get-ChildItem -Recurse . | Where-Object {
$_.TemplateName -match $'myTemplate' -and
$_.Fields[$fromfield].Value -ne $null -and
$_.Fields[$fromfield].Value -ne ""
} | ForEach-Object {
}
我花了大约1分钟来获取所有项目,因为数据很大。
所以我尝试使用Find-Item
来加快搜索过程
Find-Item -Index 'sitecore_mastre_index' -Where 'TemplateName = @0' -WhereValues 'myTemplate'
它给了我以下警告,请注意我使用Sitecore版本7.2
警告:由于平台限制,此版本的Sitecore不支持参数。
从Sitecore版本7.5开始支持此参数
有没有办法使用PowerShell以比使用Get-ChildItem
更快的方式检索数据?
注意:如果我使用Get-Item .
,则查询仅返回前100个项目。我还有更多项目。
答案 0 :(得分:4)
有几件事需要考虑。
示例: Get-ChildItem
# Essentially touches all of the items in the database.
# It's one of the most common ways to query the items,
# but should be a narrow path.
Get-ChildItem -Path "master:\" -Recurse
示例:查找项目
# This example is what you need to query the index.
# You can chain together multiple Criteria by making a comma separated list of hashtables.
# Piping to the Initialize-Item command will convert SearchResultItem to Item.
# PS master:\> help Find-Item -Examples
Find-Item -Index sitecore_master_index -Criteria @{Filter = "Equals"; Field = "_templatename"; Value = "Sample Item"} | Initialize-Item
示例:快速查询的Get-Item
# This example takes advantage of the fast query. Substitute for your use case.
$query = "fast:/sitecore//*[@@templatename='Sample Item']"
Get-Item -Path "master:" -Query $query
我们整理的这本书也可能证明是有益的。 https://www.gitbook.com/book/sitecorepowershell/sitecore-powershell-extensions/details