2012-11-03 2 views
1

Lucene.Net 및 NHibernate.Search를 전체 텍스트 검색 엔진으로 사용하는 웹 응용 프로그램이 있습니다. NHibernate.Search는 데이터베이스에서 변경이 이루어질 때마다 Lucene 인덱스에 전달되도록 설정됩니다.Lucene.net 및 NHibernate 검색 동시성 문제

웹 응용 프로그램이 4 개의 작업자 프로세스를 사용하여 실행 중입니다. 우선이 문제가 있습니까? Lucene 지수가 데이터베이스와 동기화되어 100 %가 아니라는 사실을 알고 있습니다. 데이터베이스에 대한 일부 변경 사항은 Lucene 색인에 나타나지 않습니다. 그러나 수동으로 데이터의 색인을 다시 만들려고하면 정상적으로 작동합니다.

다중 프로세스 환경에서 Lucene.Net을 사용할 때 동시 작업과 관련이 있습니까?

+0

IndexReader는 인덱스를 열 때 존재했던 것처럼 인덱스에서만 작동한다는 점도 기억해야합니다. IndexReader를 연 후에 인덱스를 업데이트하면 이러한 새 문서가 표시되지 않습니다. –

+0

@ MarkLeightonFisher 문제는'LockObtainTimeouts' 때문이었습니다 - 우선 NHibernate 로거가 꺼져있어 감지 할 수 없었습니다. 문제는 그러한 타임 아웃이 발생하면 항목이 저장되지 않는다는 것입니다. 나는이 모든 타임 아웃의 정확한 원인을 여전히 찾아야한다. –

+0

이 칼과 행운이 있었나요? – coalvilledave

답변

0

이것은 인덱스 디렉토리에서 잠금을 유지하는 열린 IndexWriter의 문제와 같습니다. 한 작업자 프로세스는 다른 프로세스의 인덱스를 잠급니다.

Lucene.Net은 색인 당 하나의 작성자가있는 한 다중 프로세스 환경에서 사용할 수 있습니다. 다른 디렉토리 구현은 다른 방법으로이를 적용합니다. 일반적으로 파일 이름은 write.lock입니다.

일반적인 해결책은 색인 생성과 검색을 처리하는 별도의 검색 프로세스를 만드는 것입니다.

+0

그 이후로 나는 검색 기능이 외부 프로세스로 추출되어서 검색만을 위해 Lucene을 통해 문서 데이터베이스를 사용하도록 이동했습니다. 이것으로 Lucene은 색인 당 하나의 작가 만 지원한다는 것을 알게되었습니다. –