2013-05-21 10 views
0

하나의 Windows 서버 2008에서만 응용 프로그램을 호스팅하기 때문에이 문제에 대해 생각하지 않았습니다. lucene.net은 로컬 하드 드라이브에 색인을 저장합니다.Lucene.net 서버 팜/다중 서버

(기본적으로, 사용자 포스트 무언가 또는 뭔가를 회신 할 때마다, 나는 인덱스를 업데이트하기 때문에 검색이 최신 결과를 반환 할 수 있습니다. 즉, 그것을 할 수있는 가장 좋은 방법인지 확실하지 않음) 이제

가 우리는로드 밸런서가있는 다른 웹 서버가 필요합니다.로드 밸런서가 가리키는 위치에 의존하여 각 인덱스를 구분할 수는 없습니다.

나를위한 한 가지 옵션은 두 서버를 연결하여 인덱스를 저장하는 공유 서버에 매핑하는 것이지만 그 해결책이 무엇입니까?

서버 팜 환경에서 lucene.net의 구문 분석 및 색인 생성을 어떻게 관리 했습니까?

덕분에 많은

답변

0

당신이하는 WCF 또는 나머지 서비스 같은를 기능을 제공하는 서비스를 생성하여 웹 응용 프로그램에서 루씬 인덱스 엔진을 분리해서 할 수있다.

기존 검색 서버를 사용할 수도 있습니다.

http://lucene.apache.org/solr/

http://www.elasticsearch.org/

+0

thankd @Jf. 필자는 solr에 익숙하지 않지만 웹 애플리케이션에서 lucene index 엔진을 꺼내는 것으로 설정 간격마다 색인 기능을 예약하고 매번 전체 데이터베이스를 검토해야한다는 것을 의미합니다. 우리가 가능한 한 빨리 결과를 얻으 려한다면 지금 당장은 그것이 가능하다고 확신하지 못합니다. 1 테이블에, 우리는 1000 만 레코드가 있습니다. 나는 lucene이 문제를 일으키는 데 아무런 문제가 없다고 확신하지만 lucene을 데이터베이스에서 검색하여 파싱하는 것은 시간이 걸릴 것입니다. – Liming

+0

대부분의 레코드가 항상 변경되지 않는 한 레코드를 타임 스탬프하고 매분마다 데이터베이스를 쿼리 할 수 ​​있습니다. –

0

우리가 동기화 우리의로드 밸런싱 서버를 유지하는 방법은, 루씬의 자신의 사본과 함께 각각 지휘 5 분마다 실행하는 다른 서버에서 작업을하는 것입니다 각로드 밸런싱 서버는 인덱스를 특정 타임 스탬프로 업데이트합니다.

예를 들어 작업은로드 균형 조정 된 모든 서버에 '12/1/2013 12 : 35 : 02.423 '의 타임 스탬프를 보냅니다 (작업은 쿼리 스트링을 통해로드 밸런싱 된 각 웹 사이트의 웹 페이지에 타임 스탬프를 제출합니다)), 각 서버는 해당 시간 소인을 사용하여 데이터베이스에서 해당 시간 소인까지 마지막 갱신 이후 발생한 모든 갱신 사항을 조회하고 해당 지역의 Lucene 색인을 갱신합니다.

각 서버는 타임 스탬프를 db에 저장하므로 각 서버가 마지막으로 업데이트 된시기를 알 수 있습니다. 따라서 서버가 오프라인 상태가되어 온라인 상태가되면 다음에 타임 스탬프 명령을 받으면 오프라인 상태에서 놓친 모든 업데이트를 가져옵니다.