C# Sitecore中的Lucene搜索;没有返回结果
我有一个正在生成的索引,可以浏览Luke创建的所有项目。在Luke中执行了一个查询,甚至成功地返回了结果——在下面的C代码中实现,但没有返回。有什么明显的东西我遗漏了吗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
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意识到它是基于零的!