2013-10-17 3 views
0

나는 "거의 실시간 검색"과 같은 일부 기능을 사용하여 검색 시스템의 속도를 향상시켜 색인 열기를 빠르게하고 싶습니다.Lucene 실시간 검색 가까운

의 차이점과 장점 하나를 사용하여 또는이 무엇인지 말해 줄 수

다음 코드 조각의 다른 :

IndexReader newIndexReader = IndexReader.openIfChanged(oldReader); 

IndexWriter writer; // create an IndexWriter here 
... 
IndexReader reader = writer.getReader(); 

주 그 첫 번째 경우 내가 돈에 indexWriter가 IndexReader와 동일한 프로세스에 있어야합니다.

답변

2

우선 writer.getReader()은 3.6 릴리스에서만 사용할 수 있지만 모든 v4 (4.0, 4.1, ...) 릴리스에는 없습니다. 따라서 유지 보수성에 신경 쓰면 사용하지 말아야합니다.

이제 귀하의 질문에 답변하십시오. writer.getReader()은 보류중인 모든 쓰기를 플러시하고 무조건적으로 새 판독기를 엽니 다 (플러스 몇 가지 다른 제한 사항이 있습니다 - javadoc 메쏘드 참조). IndexReader.openIfChanged(oldReader)은 변경된 사항이있는 경우에만 새 판독기를 열고, 그렇지 않으면 이전 판독기를 반환합니다.

내 취향에 따라 작가로부터 독자를 여는 것도 개념적으로 잘못되었습니다 (예 : 독자가 문서를 삭제하는 것이 가능했던 등의 문제가있는 다른 사례가있었습니다).

둘 중 하나를 선택하는 경우 사용할 방법이 의심의 여지가 없습니다.

+0

두 가지 방법의 성능에 대해서도 알고 있습니까? –

+0

기본 색인이 변경되지 않은 경우, 'IndexReader.openIfChanged (oldReader)'는 더 이상 작동하지 않기 때문에 더 빨라야합니다. 색인이 변경된 경우 확실하지 않습니다. 더 많은 연구가 필요합니다. – mindas