2010-01-04 7 views
1

저는 Sitecore WCMS를 사용하고 Lucene.net을 사용하여 일부 기준에 따라 색인을 검색하는 C# 코드를 가지고 있습니다. 다음과 같이 IndexSearcher 클래스를 사용하고 있습니다.Lucene.net IndexSearcher.search 결과 없음

Database webDB = Sitecore.Context.Database; 
Sitecore.Data.Indexing.Index index = webDB.Indexes["CampusNewsIndex"]; 
IndexSearcher indexSearcher = index.GetSearcher(webDB); 
BooleanQuery completeQuery = new BooleanQuery(); 
// build completeQuery 
Hits hits = indexSearcher.Search(completeQuery, sort); 

for (int i = 0; i < hits.length(); i++) 
{ 
    returnItems[i] = Sitecore.Data.Indexing.Index.GetItem(hits.Doc(i), Sitecore.Context.Database); 
} 

이 코드는 결과가 반환되면 올바르게 작동합니다. 그러나 "hits"에 결과가없는 경우 hits.length()는 0을 반환하는 것이 논리적 인 의미를 갖더라도 1을 반환합니다. 아무도 결과가 반환되지 않은 경우 어떻게 알 수 있습니까?

+0

결과가 없을 때 조회수에 반환되는 데이터는 무엇입니까? – danben

+0

Strange - 길이는 0이어야하며 Lucene의 Java 구현에서 0입니다. Lucene.Net 또는 WCMS 버그처럼 보입니다 ... 나는 그것을보고 할 것입니다. –

+0

예, 더 자세히 살펴보면 Sitecore 버그라고 할 것입니다. Lucene이 뭔가를 리턴하고있는 것처럼 보입니다.하지만 Sitecore가 해당 항목을 평가하려고 할 때 null입니다. 나는 Sitecore 포럼에 대한 도움을주기 위해 게시했으며, 무엇이라도 발견하면 여기에 교차 게시 할 예정입니다. – Kyle

답변

2

Sitecore 자신의 참조 코드는 실제로이 동작을 예상합니다. Reference

Item item = Index.GetItem(hits.Doc(i), db); 
if (item != null) 

는 다시 결과를 얻고 있지만이 항목의 해결을 통해 해결하기없는 이유의 숫자가있을 수 있습니다. 인덱싱 된 항목은 다른 데이터베이스에 있거나 현재 사용자가 사용할 수 없거나 현재 컨텍스트 언어와 다른 언어로 사용할 수 있습니다 (가장 일반적인 항목).

"고스트 결과"의 ID를 얻고 Sitecore 클라이언트에서 검색하는 것이 좋습니다. 그 이유는 무엇입니까? 문제에 대해 좀 더 밝힐 수 있습니다.

+0

내가 Sitecore를 싫어하는 또 다른 이유. 도와 주셔서 감사합니다. "유령 결과"를보고 봤는데 Sitecore 클라이언트에서 관리자로 로그인하면 아무런 결과도 반환되지 않았습니다. – Kyle