문제

내 프로젝트에서는 FullText 검색에 Lucene 2.4.1을 사용합니다. 이것은 J2EE 프로젝트입니다. 인덱스 검색자는 한 번 생성됩니다. 백그라운드에서는 인덱스가 몇 분마다 새로 고침됩니다 (콘텐츠가 변경 될 때). 사용자는 페이지의 검색 메커니즘을 통해 인덱스를 검색 할 수 있습니다.

문제는 루센이 반환 한 결과가 어떻게 든 캐싱되는 것 같습니다.

이것은 내가 알아 차린 시나리오입니다.

  • 응용 프로그램을 시작하고 '키워드'를 검색합니다. -6 결과가 반환됩니다.
  • 인덱스가 새로 고침됩니다 루크 나는 '키워드'를 쿼리하기위한 8 가지 결과가있다.
  • 응용 프로그램을 사용하여 다시 검색하면 다시 6 개의 결과가 반환됩니다.

우리 구성을 분석했는데 어디에서나 캐싱을 찾지 못했습니다. 검색을 디버깅했으며 아웃 코드에는 캐싱이 없습니다. searcher.search 6 결과를 반환합니다.

루센 캐시는 내부적으로 어떻게 든 결과를 얻습니까? 어떤 속성 등을 확인해야합니까?

도움이 되었습니까?

해결책

Indexwriters가 Open IndexReader가있는 인덱스에 대한 변경 사항을 확인하려면 전화하십시오. indexReader.Reopen () 최신 변경 사항을 보려면.

당신도 확인하십시오 인덱스 라이터 명시 적 커밋 (), close () 또는 자동 커밋이 True로 설정된 변경 사항을 커밋하고 있습니다.

다른 팁

2.9.0 이전 버전을 사용하면 Lucene은 쿼리 결과를 자동으로 캐시했습니다. 나중에 릴리스를 사용하면 쿼리를 쿼리 필터에 랩핑 한 다음 캐싱 래퍼 필터로 결과를 감싸지 않으면 캐싱이 없습니다. 인덱스를 다시 열면 릴리스> = 2.9.0으로 전환하는 것을 고려할 수 있습니다.

한 가지 더 참고 : 색인 리더를 위해 실시간 다른 스레드가 업데이트 된 문서를 찾으려면 INDEXREADER를 초기화 할 때 "읽기 전용"매개 변수가 거짓이어야합니다. 그렇지 않으면 메소드 reopen ()이 작동하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top