我正在尝试排除具有存储项目ID的字段为空的搜索结果。例如,这个字段被称为“类型”。我不能用LINQ来做这件事。下面是我的代码示例。
public class SearchItem : SearchResultItem
{
[IndexField("type")]
public string Type{ get; set; }
}
public class Search
{
public static IEnumerable<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 Search。
5条答案
按热度按时间ut6juiuv1#
不确定Sitecore Linq是否支持字符串.IsnullOrEmpty,请尝试var indexItems = context.GetQueryable().Where(x => x.Type!= null).OrderByDescending(x => x.ReleaseDate);
a0zr77ik2#
Sitecore和Lucene不支持空字符串,因为索引中没有空字段。索引中没有空项的文档。这篇文章可能会帮助你使用范围查询。
Sitecore + Lucene Search FieldQuery with and empty string
xjreopfe3#
请检查与任何索引查看器工具,如卢克,并确认该索引字段类型创建或不,如果得到创建,然后它存储的预期值或不。尝试通过调用函数进行检查,以便可以调试查询。
xmq68pz94#
现在给出答案可能为时已晚,但可能会帮助未来的读者解决同样的问题。
我使用 predicate 生成器如下,
这导致以下错误
消息:不支持空值比较。来源:Sitecore.ContentSearch.Linq.Lucene
所以在索引而不是返回字符串时修复它。空我使用返回“null”;
在我检查的 predicate 中,
是的,这是一个变通办法,但它的工作。我也试过和string比较。空的,但不起作用
ni65a41a5#
你能试着把where条件改成