2013-04-01 7 views
1

Windows Azure에서 호스팅되는 ASP.NET MVC 4 사이트가 있습니다. 이 사이트에서 전체 텍스트 검색이 필요했기 때문에 Lucene.NET을 사용했습니다. Lucene은 Windows Azure Blob을 사용하여 색인 파일을 저장합니다. 현재 쿼리에 시간이 오래 걸립니다 (약 1 분). 내가 Fiddler를 볼 때, 나는 285 개의 요청이 Blob 저장 장치로 해고되었음을 알았다.Lucene.NET with Windows Azure

내 BLOB 저장소에는 현재 10 개의 파일 만 있습니다. 가장 큰 파일은 단지 177kb입니다. 또한 Dispose 호출에 20 초 정도 걸리는 것으로 나타났습니다. 여기 내 코드가있다. 나는 너무 미친 듯이하는 것처럼 느껴지지 않는다.

IndexWriter indexWriter = InitializeSearchIndex(); 
if (indexWriter != null) 
{ 
    foreach (var result in cachedResults) 
    { 
    var document = new Document(); 
    document.Add(new Field("Name", result.Name, Field.Store.YES, Field.Index.NOT_ANALYZED)); 
    document.Add(new Field("ID", result.ID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED)); 
    document.Add(new Field("Description", result.Description, Field.Store.YES, Field.Index.NOT_ANALYZED)); 
    document.Add(new Field("LastActivity", result.LastActivity, Field.Store.YES, Field.Index.NOT_ANALYZED)); 
    indexWriter.AddDocument(document); 
    } 
    indexWriter.Dispose(); 
} 

동시에 나는 이것이 왜 그렇게 오래 걸리는 지 잘 모르겠다. 검색 세트가 작은 경우

+0

레오는 Lucene에 대해 Sql Azure가있는 훌륭한 블로그 게시물을 가지고 있습니다. http://leoncullens.nl/post/2012/11/ 18/Full-Text-Search-on-Azure-LuceneNET.aspx 도움이 될만한가요? 비슷한 구현이 있으며 수백만 건의 레코드를 통해 번개처럼 빠르게 진행됩니다. – ozz

답변

1

는/당신은 내가 쓴 Lucene.NET 디렉토리의 캐시 (미리보기) 버전을보고있다 싶어 수도 경계 - 그것은 덩어리 기반 디렉토리보다 훨씬 빠를 것이다 :

https://github.com/ajorkowski/AzureDataCacheDirectory

물론 ... 무한대의 문서 등이 있으면 최적의 해결책이 될 수 없습니다.

나는 Lucene.NET이 여러 임시 파일을 생성 한 다음 지점에서 결합하는 것을 알고 있습니다. 아마도 .Optimise 또는 비슷한 것을 호출하면 실제로 임시 파일을 푸시하기 전에 모든 임시 파일을 결합 할 수 있습니다 저장소 (나는이 단계가 새로운 Lucene.NET 버전에서는 더 이상 사용되지 않는다고 생각합니다 ...)