2013-10-08 2 views
2

Sitecore.NET 6.6.0 (. 회전 130404) 우리의 프로젝트에서Sitecore - 응용 프로그램 전체 인덱스 검색 자

우리는 우리의 모든 쿼리를 수행 할 Sitecore.Search.IndexSearchContext를 사용을 재사용. 특히 IndexSearchContext.Searcher 메서드를 사용하여 내부 Lucene 검색기에 액세스하고 Lucene 쿼리를 전달합니다.

우리는 동일한 IndexSearchContext 인스턴스를 재사용하여 모든 쿼리를 수행하면 실행되는 각 쿼리에 대해 IndexSearchContext를 만들고 파괴하는 것보다 훨씬 빠르다는 것을 발견했습니다 (웹 기사 및 실험을 통해).

또한 IndexSearchContext는 IndexSearchContext를 만든 후에 만들어진 인덱스 업데이트에 민감하지 않음을 읽었습니다. 이 때문에 공유 된 IndexSearchContext를 삭제하고 매 30 초마다 새로 작성하여 쿼리가 30 초 지연만으로 최신 결과를 얻을 수 있도록합니다. 이 방법을 사용하려면 작성의 스레드 안전성을 신중하게 처리하고 공유 된 인덱스 검색기를 처리해야합니다.

일을하는 것이 안전한 방법입니까? Sitecore에서 응용 프로그램 차원의 색인 검색 프로그램을 재사용하는 것이 바람직하지 않습니까?

감사

답변

1

나는이 방법을 시도해보고 작동하는지 확인할 수 있습니다. 색인 검색기를 10 초마다 재생성하므로 처리 할 수있는 동시 요청 수가 크게 향상되었습니다. 그러나 Sitecore의 IndexSearchContext는 이와 같이 공유 할 수 없습니다 (단일 스레드에서 생성 및 소멸되도록 의도되었습니다). 내가 한 일은 원시 Lucene IndexSearcher를 인스턴스화하여 응용 프로그램에서 공유하는 것입니다.

3

난 당신이 "게시 : 끝"에 훅 제안 (다중 서버 환경에서), 그리고 IndexSearchContext 이러한 이벤트의 불을 삭제하고 "원격 게시 : 끝". 궁극적으로 Sitecore 환경에 있으며 새 콘텐츠가 게시 될 때만 색인이 오래되어야합니다. 이 버전의 진실은 내가 실행중인 응용 프로그램의 전체 범위를 알지 못하기 때문에 약간 단순화되었습니다.

3

솔직히 많은 IndexSearchContext를 생성 할 때 성능 문제를 보지 못했습니다. 당신이 그것을 극단적으로 사용하고 극도로 최적화 된 환경을 필요로하지 않는다면, 나는 그것을 반대 할 것입니다. 잠긴 색인에 많은 문제가 발생했으며 일부 HTML 캐시 문제 (사용 된 경우)가 발생할 수 있습니다.

모두 premature optimization과 비슷합니다. 그러나 나는 당신의 완전한 체제를 모른다. 그리고 나는 틀릴지도 모른다.