Search Sitecore HOWTO:搜索具有特定值的项目存储桶

Search Sitecore HOWTO:搜索具有特定值的项目存储桶,search,sitecore,sitecore7,bucket,sitecore7.5,Search,Sitecore,Sitecore7,Bucket,Sitecore7.5,我有一个物品桶,里面有超过30000件物品。我需要的是快速搜索将特定字段设置为特定值的项目,或者更好的是在(1,2,3,4)语句中创建类似于selectwherefieldvalue的内容。有现成的解决方案吗? 我在网上搜索了一下,唯一找到的是“项目开发人员指南” Bucket和Search”,但没有代码示例。使用Sitecore内容编辑器: 转到bucket项,然后在搜索选项卡中,开始键入以下内容(用实际字段名和值替换字段名和值): 自定义:字段名|值 然后按enter键,您将看到查询结果,如

我有一个物品桶,里面有超过30000件物品。我需要的是快速搜索将特定字段设置为特定值的项目,或者更好的是在(1,2,3,4)语句中创建类似于selectwherefieldvalue的内容。有现成的解决方案吗? 我在网上搜索了一下,唯一找到的是“项目开发人员指南”
Bucket和Search”,但没有代码示例。

使用Sitecore内容编辑器:

转到bucket项,然后在搜索选项卡中,开始键入以下内容(用实际字段名和值替换字段名和值):

自定义:字段名|值

然后按enter键,您将看到查询结果,如果需要,您可以同时执行多个查询


使用Sitecore内容搜索API:

使用Sitecore.ContentSearch;
使用Sitecore.ContentSearch.Linq;
使用Sitecore.ContentSearch.SearchTypes;
使用Sitecore.ContentSearch.Linq.Utilities
ID bucketItemID=“存储桶项目的GUID”;
ID templateID=“bucket下项目模板的Guid”;
字符串值=“1,2,3,4,5”;
使用(var context=ContentSearchManager.GetIndex(“sitecore\u web\u index”).CreateSearchContext()
{
var predicate=PredicateBuilder.True();
谓词=谓词builder.And(item=>item.TemplateId==新ID(TemplateId)
&&item.path.Contains(bucketItemID));
var innerPredicate=PredicateBuilder.False();
foreach(values.Split(',')中的字符串val)
{
innerPredicate=PredicateBuilder.False();
innerPredicate=innerPredicate.Or(item=>item[“FIELDNAME”]==val);
}
谓词=谓词和(内部谓词);
var result=predicate.GetResults();
List ResultsItems=新列表();
foreach(var命中结果.命中数)
{
Item=hit.Document.GetItem();
如果(项!=null)
{
结果项。添加(项);
}
}
}
以下链接可以为搜索API提供良好的开端:


  • 希望这有帮助

    你需要这样的东西。Bucket项是可索引的,因此可以使用Sitecore 7搜索API对其进行搜索

    下面的代码片段可以很容易地进行修改以满足您的需要,这只是一个修改where子句的问题。如果您需要有关sitecore 7语法的任何进一步帮助,请在下面的QuickStart博客文章中写下评论,我会给您回复

    var bucketItem = Sitecore.Context.Database.GetItem(bucketPath);
      if (bucketItem != null && BucketManager.IsBucket(bucketItem))
      {     
         using (var searchContext = ContentSearchManager.GetIndex(bucketItem as IIndexable).CreateSearchContext())
        {
            var result = searchContext.GetQueryable<SearchResultItem().Where(x => x.Name == itemName).FirstOrDefault();
            if(result != null)
                Context.Item = result.GetItem();
        }
      }
    
    var-buckettem=Sitecore.Context.Database.GetItem(bucketPath);
    if(bucketItem!=null&&BucketManager.IsBucket(bucketItem))
    {     
    使用(var searchContext=ContentSearchManager.GetIndex(bucketItem作为IIndexable.CreateSearchContext())
    {
    var result=searchContext.GetQueryable x.Name==itemName).FirstOrDefault();
    如果(结果!=null)
    Context.Item=result.GetItem();
    }
    }
    
    进一步阅读我的博客文章:


    如您所见,通过下面的回答,您可以使用sitecore 7 api。快速入门指南的链接是我写的,所以如果在标记答案时考虑到这一点,我将不胜感激。希望这能解决你的问题。你知道为什么bucketItem作为IIIndexable会为null吗?@Ernesto我来这里真的很晚了,但修复程序应该将你的项传递给SitecoreIndexableItem值构造函数<代码>var indexableItem=新站点CoreIndexableItem(bucketItem)