我试图排除具有存储项目ID的字段为空的搜索结果。例如,此字段称为' type'。我还没有能够使用LINQ做到这一点。这是我的代码示例。
public class SearchItem : SearchResultItem
{
[IndexField("type")]
public string Type{ get; set; }
}
public class Search
{
public static IEnumberable<Item> GetItems()
{
List<Item> items = new List<Item>();
var index = ContentSearchManager.GetIndex(new SitecoreIndexableItem(Sitecore.Context.Item));
using (var context = index.CreateSearchContext())
{
var indexItems = context.GetQueryable<SearchResultItem>()
.Where(x => !string.IsNullOrEmpty(x.Type))
.OrderByDescending(x => x.ReleaseDate);
foreach(var indexItem in indexItems)
{
var tempItem = indexItem.GetItem();
items.Add(tempItem);
}
}
return items;
}
}
空字符串比较不起作用,而items集合包含Type字段为空字符串的项目。我正在使用Lucene的开箱即用设置。
另外,如果你看到不对劲的话,请在我的代码中戳洞。这是我第一次使用Sitecore 7搜索。
答案 0 :(得分:1)
不确定Sitecore Linq是否支持string.IsnullOrEmpty,请尝试var indexItems = context.GetQueryable() .Where(x =&gt; x.Type!= null) .OrderByDescending(x =&gt; x.ReleaseDate);
答案 1 :(得分:0)
Sitecore和Lucene不支持空字符串,因为索引中没有空字段。索引中没有空项目的文档。这篇文章可能会帮助您使用Range查询。
答案 2 :(得分:0)
请检查任何索引查看器工具(如Luke)并确认是否已创建索引字段类型,如果已创建,则它是否存储预期值。 尝试通过调用函数进行检查,以便调试查询。
protected bool checkType(SearchResultItem Ritem)
{
if (Ritem.type != null || !string.IsNullOrEmpty(Ritem.type))
{
return true;
}
return false;
}
答案 3 :(得分:0)
您可以尝试将where条件更改为
public class SearchItem : SearchResultItem
{
[IndexField("type")]
public string Type{ get; set; }
}
public class Search
{
public static IEnumberable<Item> GetItems()
{
List<Item> items = new List<Item>();
var index = ContentSearchManager.GetIndex(new SitecoreIndexableItem(Sitecore.Context.Item));
using (var context = index.CreateSearchContext())
{
var indexItems = context.GetQueryable<FRBSearchResultItem>()
.Where(x => !string.IsNullOrEmpty(x["type"]))
.OrderByDescending(x => x.ReleaseDate);
foreach(var indexItem in indexItems)
{
var tempItem = indexItem.GetItem();
items.Add(tempItem);
}
}
return items;
}
}
答案 4 :(得分:0)
答案可能为时已晚,但可能会帮助未来的读者遇到同样的问题。
我正在使用谓词构建器,如下所示,
faqPredicate = faqPredicate.And(x => x.FAQAudience != null);
这导致以下错误
消息:不支持比较空值。 资料来源:Sitecore.ContentSearch.Linq.Lucene
所以要在索引时修复它而不是返回string.Empty我使用return“null”;
并在我检查的谓词中
faqPredicate = faqPredicate.And(x => x.FAQAudience != "null");
是的,这是一种解决方法,但它有效。我也尝试过与string.Empty进行比较但是没有用