gpt4 book ai didi

powershell - Sitecore Powershell搜索包含关键字的所有项目

转载 作者:行者123 更新时间:2023-12-02 23:11:45 25 4
gpt4 key购买 nike

我对 sitecore powershell 完全陌生。我浏览了一些文章,但对我没有任何帮助。

我需要的是:在Sitecore中,我想搜索一个特定的关键字,并且希望输出中列出的所有项目。关键字可以包含在单行文本,多行文本,常规链接,RichText或图像中。我知道使用 sitecore powershell 是可以实现的。有什么天才(当然对我来说是)可以解决我的问题吗?

我正在尝试的东西。如果这没有任何意义,请忽略:)

cd 'master:/sitecore/content'
 
function FilterItemsToProcess($item)
{
    Get-Item master:\content
}
 
$list = [System.Collections.ArrayList]@()
$itemsToProcess = Get-ChildItem -Recurse . | foreach {FilterItemsToProcess($_)}
if($itemsToProcess -ne $null)
{
     
    $itemsToProcess | ForEach-Object {
        $match = 0;
        foreach($field in $_.Fields) {
 
            # Only look within Single-line and Rich Text fields
            # In this example, we look for english content within Chinese versions
             
            if($field.Type -eq "Single-Line Text" -or $field.Type -eq "Rich Text") {
                if($field -match "mykeyword") {
                    Write-Host "Found: '$field' within a" $field.Type "field on Item:" $_.ID
                    $match = 1;
                }
            }
 
        }
        if($match -eq 1){
            [void]$list.Add($_)
        }
    }
}

最佳答案

您真的想改变这里的方法。您所拥有的将会表现很差。要在Sitecore中进行任何类型的搜索,您都想使用SearchAPI-如果您查看SPE中的 Find-Item 命令

另外,您将希望向索引添加一个自定义计算字段,以使其变得更简单。

在定制字段中,将所有Single-line textRichtext的字段添加到索引:

因此,在计算字段中,您可以执行以下操作:

public class MyCustomField : IComputedIndexField
{
public object ComputeFieldValue(IIndexable indexable)
{
var item = (Item)(indexable as SitecoreIndexableItem);
if (item == null)
{
return string.Empty;
}

var value = new StringBuilder();
item.Fields.ReadAll();
foreach (Field field in item.Fields)
{
switch (field.Type.ToLowerInvariant())
{
case "single-line text":
case "richtext":
value.AppendLine(field.Value);
break;
}
}

return value;

}
}

然后通过包含文件将该字段添加到您的配置中:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<contentSearch>
<indexConfigurations>
<defaultLuceneIndexConfiguration>
<fields hint="raw:AddComputedIndexField">
<field fieldName="mycustomfield">MyProject.ComputedFields.MyCustomField, MyProject</field>
</fields>
</defaultLuceneIndexConfiguration>
</indexConfigurations>
</contentSearch>
</sitecore>
</configuration>

因此,您可以将powershell更改为:
Find-Item `
-Index sitecore_master_index `
-Criteria @{Filter = "StartsWith"; Field = "_fullpath"; Value = "/sitecore/content/" }
@{Filter = "Contains"; Field = "mycustomfield"; Value = "mykeyword"}

这样,您便可以在必填字段类型中输入所有带有关键字的项目。

如果您无法添加自定义字段,则可以使用以下替代方法:
Find-Item `
-Index sitecore_master_index `
-Criteria @{Filter = "StartsWith"; Field = "_fullpath"; Value = "/sitecore/content/" }
@{Filter = "Contains"; Field = "_content"; Value = "mykeyword"}

这将为您提供所有实例,其中项目中的任何字段包含值 mykeyword。因为只有 Single-line TextMulti-line textRichtext存储文本内容,所以它应该非常接近您想要的内容。如果文本位于字段的任何属性中,则可能会从诸如链接字段或图像字段之类的字段中受到污染。

关于powershell - Sitecore Powershell搜索包含关键字的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37484216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com