2009-10-16 4 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)를 호출합니다.

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

관련 문제