Lucene.Net을 ASP.NET과 사용할 때 다른 웹 요청이 검색을 수행하는 동안 하나의 웹 요청이 인덱스에 대한 업데이트를 트리거 할 수 있다고 상상할 수 있습니다. Lucene.Net은 동시 액세스를 관리 할 수있는 기능을 내장하고 있습니까? 아니면 "다른 프로세스에서 사용되는"오류를 피하기 위해 관리해야합니까?Lucene.Net은 동일한 인덱스에 액세스하는 여러 스레드를 관리 하나, 다른 인덱스는 다른 인덱스를 검색하면서 인덱싱합니까?
편집 : 문서와 실험을 읽은 후 이것이 내가 배운 것입니다. 스레드 안전성과 동시성이라는 두 가지 문제가 있습니다. 멀티 스레딩은 인덱스에 나쁜 영향을 줄 수 없다는 점에서 "안전"합니다. 그러나 한 번에 인덱스를 잠그는 단 하나의 객체를 사용하는 것이 안전합니다. 두 번째 객체가 따라 와서 예외를 throw합니다. 따라서 검색을 열어두고 다른 스레드의 작성자가 인덱스를 업데이트 할 수 있다고 기대할 수는 없습니다. 그리고 스레드가 인덱스를 업데이트하는 중일 경우 탐색기를 만들려고하면 실패합니다.
또한 검색자가 색인을 열 때와 동일하므로 색인을 유지하고 업데이트하면 색인이 업데이트되지 않습니다.
내 검색 자에게 최신 업데이트를보고 싶었습니다.
내 설계 및 지금까지 작업 한 것 같습니다. 필자와 검색 자들이 잠금을 공유하여, 현재 쓰기 또는 검색이 완료 될 때까지 기다리지 않고 실패하지 않도록하는 것입니다.
자물쇠를 어떻게 구현했는지 설명해 주시겠습니까? 읽기 및 쓰기 잠금 또는 하나의 공유 잠금을 사용합니까? –
하나의 공유 잠금. 나는 내가 한 일을 썼습니다 : http://ifdefined.com/blog/post/Full-Text-Search-in-ASPNET-using-LuceneNET.aspx –
질문에 당신이 말한 것은 잘못되었습니다. "그래서, 당신은 할 수 있습니다. 검색을 열어두고 다른 스레드의 작성자가 인덱스를 업데이트 할 수 있도록해야하며, 스레드가 인덱스를 업데이트하는 중 바쁜 경우 검색자를 만들려고하면 실패하게됩니다. " 다른 답변에서 언급했듯이 : "색인 작성자 또는 독자는 검색이 진행되는 동안 lucene 색인 파일을 편집 할 수 있으며"그 반대의 경우도 마찬가지입니다. –