2011-11-14 3 views
0

Lucene.net을 사용하여 다양한 소스 (예 : 로컬 파일 시스템 및 데이터베이스)의 데이터를 색인하려고합니다. 그러나 ID와 같은 공통 필드를 기반으로 두 소스의 데이터를 연결하고 결합 된 정보를 사용자에게 표시하고 싶습니다. 내가 알 수있는 한, 세 가지 옵션이 있습니다. 각 소스 인덱싱 후 :Lucene.net을 사용하여 여러 소스의 결과를 색인하고 결합 할 수 있습니까?

  1. 사용 Lucene.net는
  2. 소급 결과를 상관 관계를 일부 사용자 지정 코드를 만들기 세트 하나의 결과로 검색 쿼리에 인덱스를 결합하기를, 또는
  3. 데이터베이스에 별도의 결과 세트를 저장하십시오 (필자의 경우, 소스와 동일한 데이터베이스가 아닐 것입니다). 그런 다음 데이터를 조인하는 쿼리를 기반으로 새 인덱스를 만들

옵션 1은 내가하고 싶은 것입니다,하지만 난이 몇 가지 이유 루씬으로 얼마나 실행 가능한 확실하지 않다 :

  • Lucene은 관계형 데이터베이스가 아니며 Lucene이 실제로 설계하지 않은 것을 시도하고 있습니까?
  • 인덱스를 결합하면 실적이 크게 상승 할 수 있습니까?

옵션 2보다 더 효율적인 알고리즘을 만들 수 있다고 생각하는 유일한 이유는 옵션 1보다 효율적입니다. 논리의 그 다음 줄에 따라 Lucene 데이터를 상관시키기 위해 나는 그것이 작동합니다 행복 해요,하지만 타협처럼 보인다 옵션 3에 날 리드

:

    데이터는 루씬 (뿐만 아니라 원래뿐만 아니라 데이터베이스에 저장됩니다
  • 소스)
  • 추가 단계를 도입하면 프로세스를 완료하는 데 더 오래 걸립니다. 이것이 사용자 환경에 어떤 영향을 미치는지 잘 모르겠습니다.

어떤 제안이 있습니까?

답변

5

네, 할 수는 있습니다 만, 관계보다는 생각을 멈추고 행이 아닌 문서 측면에서 생각해야합니다. 또는 옵션 3이 올바른 접근 방식입니다. 당신이 원하는 것은 하나의 문서 보유를 만드는 것입니다 :

A) 내가 검색 싶어 무엇이든 - 전체, 현존하는 기록에) 루씬의 측면에서 analyized 필드 포인터를
B를 - 기본적으로 ID 번호 또는 파일 위치는
입니다. c) 가능한 경우 파일 시스템이나 데이터베이스에 접근하지 않아도 검색 결과를 표시 할 수있는 충분한 정보 (예 : lucene parlance의 필드).

성능 측면에서 오버 헤드 나 과부하가 지나치지 않습니다. 즉석에서 색인에 항목을 추가하는 것은 성능에 큰 영향을 미치지 않으며 루씬 자체가 놀라 울 정도로 빠릅니다. 합리적이고 구성 요소가있는 방식으로 구축 한 다음 필요한 경우 성능을 향상시킵니다.

관련 문제