2009-10-16 9 views
3

Lucene 색인에서 오래된 문서를 삭제하는 관용적 인 방법은 무엇입니까?Lucene/Lucene.NET에서 오래된 문서를 삭제하는 방법

나는 모든 문서에 날짜 필드 (YYYYMMddhhmmss)가 있으며, 예를 들어 오래된 것보다 많은 것을 제거하고 싶습니다.

필터링 된 검색을 수행하거나 IndexReader의 문서를 통해 열거해야합니까?

Lucene이 실행중인 플랫폼에 상관없이 질문이 동일하다고 확신합니다.

감사합니다.

답변

3

YYYYMMdd *에 대한 검색은 현재 날짜가 텍스트 문자열로 저장되므로 작동해야합니다. 결과를 얻었 으면 IndexReader.delete를 사용하여 관심이없는 문서를 제거 할 수 있습니다.이를 달성하는 가장 좋은 방법은 내게 있습니다.

+0

그 접근법에서 볼 수있는 한 가지 문제점은 오래된 1024 개 이상의 문서가있을 때 "TooManyClauses"예외가 발생한다는 것입니다. –

+0

이것은 실제로 구현에 따라 다릅니다. 세부 사항을 알아야하지만, 일반적으로 어쨌든 (max 절을 더 높게 설정하여) 유지 관리가되거나 특정 검색 (YYMMddhh * 등)을 수행하기 때문에 이러한 경고에 대한 경고를 제거 할 수 있습니다. 다시 말하지만, 모두 환경과 구현에 따라 다릅니다. – synhershko

+0

MatchAllDocsQuery와 RangeFilter를 사용하여 약간 변형되었습니다. 지금까지 OK 일하고있는 것 같습니다 ... –

2

Lucene의 저수준 API를 사용해 볼 수 있습니다.

용어 "YYYY"라는 용어가있는 인덱스의 열거 자 가져 오기. 조건을 얻기 위해 용어 열거자를 반복하십시오. 해당 용어의 텍스트에 현재 날짜 (또는 이전 날짜)가없는 경우 해당 용어로 IndexReader.deleteDocuments (term)를 호출합니다.

쿼리 개체를 사용하지 않으므로 검색 관련 예외가 발생하지 않습니다.