搜索空白字段

时间:2014-10-22 15:22:52

标签: c# lucene sitecore sitecore7 sitecore7.2

我试图排除具有存储项目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搜索。

5 个答案:

答案 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查询。

Sitecore + Lucene Search FieldQuery with and empty string

答案 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进行比较但是没有用