Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sitecore中的Lucene搜索;没有返回结果_C#_Search_Lucene_Sitecore_Sitecore8 - Fatal编程技术网

C# Sitecore中的Lucene搜索;没有返回结果

C# Sitecore中的Lucene搜索;没有返回结果,c#,search,lucene,sitecore,sitecore8,C#,Search,Lucene,Sitecore,Sitecore8,我有一个正在生成的索引,可以浏览Luke创建的所有项目。在Luke中执行了一个查询,甚至成功地返回了结果——在下面的C代码中实现,但没有返回。有什么明显的东西我遗漏了吗 totalResults = 0; using (var context = ContentSearchManager.GetIndex("custom_search_index").CreateSearchContext()) { var filt

我有一个正在生成的索引,可以浏览Luke创建的所有项目。在Luke中执行了一个查询,甚至成功地返回了结果——在下面的C代码中实现,但没有返回。有什么明显的东西我遗漏了吗

            totalResults = 0;
        using (var context = ContentSearchManager.GetIndex("custom_search_index").CreateSearchContext())
        {
            var filterPredicate = PredicateBuilder.True<SearchItem>();
            var termPredicate = PredicateBuilder.False<SearchItem>();

            termPredicate = termPredicate
                                .Or(p => p.Name.Like(keyword, 0.75f)).Boost(2.0f)
                                .Or(p => p.Excerpt.Like(keyword))
                                .Or(p => p.SearchTags.Like(keyword))
                                .Or(p => p.HtmlContent.Like(keyword));

            var predicate = filterPredicate.And(termPredicate);
            var query = context.GetQueryable<SearchItem>().Where(predicate);

            var results = query.Page(page, itemsPerPage).GetResults();

            totalResults = results.TotalSearchResults;
            var result = results.Hits.Select(h => GetPage(h.Document)).ToArray();

            return result;
        }
在Search.Log中,我得到以下结果

ExecuteQueryAgainstLucene自定义搜索索引:\名称:1980~0.75摘录:1980年代搜索标签:1980年代htmlcontent:1980年代-筛选器:


如果我在Luke中运行“_name:1980~0.75摘录:1980年代搜索标签:1980年代htmlcontent:1980年代”,我会得到一个结果

大多数情况下,这表明索引已过期。例如,结果指向的项目已被删除或尚未发布。重建索引应导致Luke和Sitecore返回相同的结果


另外,检查分页是否不排除结果。也许不需要分页就可以先尝试它。

因此,如果我使用以下代码:

var results = query.Page(page, itemsPerPage).GetResults();

其中page为1,itemsPerPage为5,但我的筛选结果只返回一个值或更少,而itemsPerPage GetResults不返回任何结果

从其他评论来看,您似乎在使用page=1来获得第一页结果

但是page参数是从零开始的,这意味着如果您想要第一个页面,就必须使用0

// This will return the first 5 results (page 1)
query.Page(0, 5).GetResults();

// This will return the next 5 results (page 2)
query.Page(1, 5).GetResults();
这可以通过查看页面的代码来验证。。扩展方法:

return Queryable.Take<TSource>(Queryable.Skip<TSource>(source, page * pageSize), pageSize);

请确定,您是否在同一个自定义索引上使用Luke,即自定义搜索索引?totalResults也是0吗?GetPage函数返回什么?是,在两个实例中使用相同的索引。GetPage将项目映射到Sitecore项目以获取更多详细信息。问题是否仅限于“1980年代”?你试过只使用字母的查询吗?是的,如果我删除了查询中的where子句,我会得到所有的页面!所以问题似乎与过滤部分有关。如果我删除了查询中的where子句,我将获得所有页面!所以问题似乎与过滤部分有关。或者在分页部分,因为如果没有过滤,您可能会得到大量满足分页参数的结果。这很奇怪,如果我过滤并排除分页器,它会返回一个匹配项!如果只有一个结果,为什么寻呼机什么也不返回?是的,页面值是以零为基础的。页面的代码。。扩展方法是这样的:Queryable.TakeQueryable.Skipsource,page*pageSize,pageSize,所以它将首先跳过1*5,然后接受5项。谢谢,是的,afterwords意识到它是基于零的!