lucene in action 노트 의 색인


  • 가장 간단 한 색인 과정 을 실행 하 는 데 필요 한 몇 가지 종류: IndexWriter, Directory, Analyzer, Document, Field.간단 한 예 는 다음 과 같다.
    public static int index(File indexDir, File dataDir)
        throws IOException {
    
        if (!dataDir.exists() || !dataDir.isDirectory()) {
          throw new IOException(dataDir
            + " does not exist or is not a directory");
        }
        if (dataDir.isHidden() || !dataDir.canRead()||!dataDir.getName().endsWith(".txt")) {
        	throw new IOException(dataDir
        	        + " error!");
        }
    
        IndexWriter writer = new IndexWriter(indexDir,
          new StandardAnalyzer(), true);
        writer.setUseCompoundFile(false);
        //   IndexWriter's setUseCompoundFile(true)       ,        。
        
        System.out.println("Indexing " + dataDir.getCanonicalPath());
        
        Document doc = new Document();
        doc.add(Field.Text("contents", new FileReader(dataDir)));
        doc.add(Field.Keyword("filename", dataDir.getCanonicalPath()));
        writer.addDocument(doc);
    
        int numIndexed = writer.docCount();
        writer.optimize();
        writer.close();
        return numIndexed;
      }
     

  • 색인 과정의 세 가지 주요 단계: 데 이 터 를 텍스트 로 변환 하고 텍스트 를 분석 하 며 분석 한 텍스트 를 색인 라 이브 러 리 에 저장 합 니 다.              주 1: Lucene 은 텍스트 파일, 즉. txt 파일 만 색인 할 수 있 습 니 다.주 2: 데 이 터 를 분석 하 는 가장 대표 적 인 조작 은 입력 에서 자주 사용 되 지만 실제 적 인 의미 가 없 는 단 어 를 제거 하 는 것 이다. 예 를 들 어 영어 텍스트 중의 일부 정지 어 (a, an, the, on, in 등).주 3: 데 이 터 는 역 렬 색인 의 데이터 구조 로 저장 되 는데 그 이 유 는 역 렬 색인 은 '이 문서 에 그 단어 들 이 포함 되 어 있 습 니까?' 라 고 대답 하 는 것 이 아니 라 최적화 된 후에 '그 문서 에 포 함 된 단어 x?' 라 고 신속하게 대답 하 는 것 입 니 다.

  • 기본 색인 작업: 1) Lucene 은 서로 다른 Field 대상 을 가 진 Document 대상 이 하나의 색인 에서 공존 할 수 있 도록 합 니 다.2) 하나의 기본 단어 와 그 모든 동의어 를 색인 하려 면 같은 도 메 인 에 여러 개의 다른 값 을 부여 할 수 있다.3) 색인 에 있 는 문 서 를 IndexReader 로 삭제 합 니 다. IndexReader 가 close () 를 호출 한 후에 야 진정 으로 삭제 할 수 있 습 니 다.4) 모든 문서 에 유일한 내부 번호 가 있 지만 이것 은 영구적 인 것 이 아니 라 번 호 는 0 에서 시작 합 니 다.
  • IndexReader 의 몇 가지 방법: 1) maxDoc (): 다음 문서 의 내부 번 호 를 되 돌려 줍 니 다. 번 호 는 0 부터 시작 합 니 다.2) numDocs (): 색인 에 있 는 문서 의 수 를 되 돌려 줍 니 다.3) hasdeletions (): 삭제 표시 가 있 는 문서 가 색인 에 포함 되 어 있 는 지 확인 합 니 다.4) isdeleted (int): 특정한 번호 의 문서 상 태 를 검사 합 니 다.5) delete (int), delete (Term): 지정 한 문 서 를 삭제 합 니 다.
  • Document 와 Field 호출 setBoost (float) 를 가중 처리 하면 검색 할 때 역할 을 합 니 다.lucene 의 검색 결 과 는 문서 대상 과 조회 의 일치 도 에 따라 정렬 되 고 일치 하 는 문서 대상 마다 평 점 이 있 습 니 다.평 점 공식 은 여러 개의 인자 로 구성 되 어 있 는데 가중 인 자 는 바로 그 중의 하나 이다.
  • Lucene 에서 자체 적 으로 가지 고 있 는 DateField 류 는 1970 년 이전의 날 짜 를 처리 할 수 없다.
  • Lucene 은 내부 에서 문자열 로 수 치 를 처리 하 는 방식 으로 수 치 를 색인 합 니 다.색인 이 필요 한 숫자 가 자유 형식 텍스트 에 나타 나 면 먼저 숫자 를 지원 하 는 Analyzer 류 를 선택해 야 합 니 다.
  • 색인 수 치 역 대상 이 있 을 때 그들 을 이용 하여 범위 조 회 를 하려 면 0 으로 채 워 라.
  • 특정한 도 메 인 대상 의 값 에 따라 정렬 하려 면 색인 되 지만 어휘 에 의 해 단원 화 되 지 않 는 도 메 인 대상 으로 해 야 한다.정렬 에 사용 할 도 메 인 대상 은 반드시 정형, 부동 소수점 또는 문자열 로 변환 할 수 있 는 대상 입 니 다.
  • 작은 max Factor 인 자 는 메모리 의 사용 을 감소 시 키 고 색인 업데이트 의 빈 도 를 높 인 다.데이터 의 실시 성 은 더욱 강하 지만 색인 과정의 속 도 를 낮 추 었 다.주: 비교적 큰 MaxFactor 매개 변 수 는 색인 파일 의 수량 을 증가 시 켜 사용자 의 검색 속 도 를 낮 출 수 있 습 니 다.
  • 비교적 큰 max MergeDocs 매개 변 수 는 대량 색인 에 더욱 적용 되 고 작은 max MergeDocs 매개 변 수 는 상호작용 이 강 한 색인 에 더욱 적용 된다.
  • 응용 프로그램 이 max FieldLength 를 처리 할 때 Integer. MAX 로 설정 해 야 합 니 다.VALUE。max FieldLength 의 값 은 색인 과정 에서 임의의 시간 에 수정 되 고 그 후에 모든 문 서 를 추가 하 는 데 도움 이 됩 니 다.
    private void addDocuments(Document doc, int maxFieldLength)
        throws IOException {
        IndexWriter writer = new IndexWriter(dir, new SimpleAnalyzer(),
          true);
        writer.maxFieldLength = maxFieldLength;
        writer.addDocument(doc);
        writer.optimize();
        writer.close();
      }
  • 색인 을 최적화 하면 모든 단락 을 하나의 단락 으로 합 쳐 Index Writer 의 optimize () 방법 으로 최적화 할 수 있다.
  • 색인 최적화 에 대해 검색 작업 의 속도 만 높 일 뿐 색인 과정의 속도 에 영향 을 주지 않 는 다.
  • 색인 과정 에서 색인 을 최적화 하 는 방법 은 제창 할 가치 가 없다.최 적 화 된 시 기 는 색인 과정 이 끝 난 후에 색인 파일 을 변경 하지 않 는 다 는 것 을 확인 할 때 입 니 다.
  • 동시 방문 의 원칙: 1) 어느 순간 색인 을 수정 하 는 작업 만 수행 할 수 있 습 니 다.같은 시간 에 하나의 색인 파일 은 하나의 IndexWriter 나 IndexReader 대상 에 의 해 만 열 릴 수 있다 는 것 이다.   2) 색인 파일 이 최적화 되 고 있 거나 색인 이 문서 의 추가, 업데이트 또는 삭제 작업 을 수행 하고 있 을 때 임의의 읽 기 전용 작업 을 동시에 수행 할 수 있 습 니 다.
  • IndexWriter 와 IndexReader 는 모두 스 레 드 가 안전 합 니 다.그러나 같은 색인 에서 IndexWriter 와 IndexReader 를 동시에 열 수 없 음 을 주의 하 십시오.
  • 색인 자 물 쇠 는 파일 기반 입 니 다. 각 색인 은 자체 적 으로 인 정 된 파일 집합 이 있 습 니 다. 기본 적 인 상황 에서 모든 잠 금 파일 은 컴퓨터 의 임시 디 렉 터 리 에 생 성 됩 니 다. 이 디 렉 터 리 는 자바 의 자바. io. tmpdir 의 시스템 속성 에 의 해 지 정 됩 니 다.
  • write. lock 파일 은 프로 세 스 가 색인 을 수정 하 는 것 을 막 는 데 사 용 됩 니 다.   commt. lock 파일 은 단락 을 읽 거나 병합 할 때 사용 합 니 다.강력 한 건의: Lucene 의 잠 금 체 제 를 임의로 수정 하지 마 세 요.
  • 루 셀 이 색인 을 기록 하 는 과정 을 디 버 깅 하면 IndexWriter 의 공유 변수 인 inforStream 을 OutputStream 의 하나 로 설정 할 수 있 습 니 다. 예 를 들 어 System. out 등 으로 설정 하여 루 셀 이 색인 작업 을 할 때 구체 적 인 정 보 를 출력 할 수 있 습 니 다.다음 과 같다.
    IndexWriter writer = new IndexWriter(dir, new SimpleAnalyzer(), true);
    writer.infoStream = System.out;
    ...
     
  • 좋은 웹페이지 즐겨찾기