我有一个装有超过3万个物品的物品桶。我需要快速搜索将特定字段设置为特定值的项目,甚至更好的方法是进行SELECT WHERE fieldValue IN(1,2,3,4)语句之类的操作。有没有现成的解决方案?我在网上搜索,发现的唯一内容是“项目存储桶和搜索开发人员指南”,但是没有代码示例。
使用Sitecore内容编辑器:
转到存储桶项,然后在“搜索”选项卡中,开始键入以下内容(将字段名和值替换为实际的字段名和值):
自定义:字段名称|值
然后按Enter键,您将看到查询结果,如果需要,可以一次进行多个查询。
使用Sitecore内容搜索API:
using Sitecore.ContentSearch;
using Sitecore.ContentSearch.Linq;
using Sitecore.ContentSearch.SearchTypes;
using Sitecore.ContentSearch.Linq.Utilities
ID bucketItemID = "GUID of your bucket item";
ID templateID = "Guid of your item's template under bucket";
string values = "1,2,3,4,5";
using (var context = ContentSearchManager.GetIndex("sitecore_web_index").CreateSearchContext())
{
var predicate = PredicateBuilder.True<SearchResultItem>();
predicate = PredicateBuilder.And(item => item.TemplateId == new ID(templateID)
&& item.Paths.Contains(bucketItemID));
var innerPredicate = PredicateBuilder.False<SearchResultItem>();
foreach(string val in values.Split(','))
{
innerPredicate = PredicateBuilder.False<SearchResultItem>();
innerPredicate = innerPredicate.Or(item => item["FIELDNAME"] == val);
}
predicate = predicate.And(innerPredicate);
var result = predicate.GetResults();
List<Item> ResultsItems = new List<Item>();
foreach (var hit in result.Hits)
{
Item item = hit.Document.GetItem();
if(item !=null)
{
ResultsItems .Add(item);
}
}
}
以下链接可以为Search API提供良好的开始:
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句