ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • lucene 으로 검색사이트 만들기 - 2 (색인편)
    학교 강의/인덱싱 2018. 12. 2. 22:09

    1편에서는 Field, Document, Analyzer, Directory 등 개념을 알아봤습니다. 

    인덱싱 편에서는 lucene에서 제공하는 인터페이스가 직관적이라 코드를 보면서 이해하는 게 좋습니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Directory directory = new RAMDirectory();
    Analyzer analyzer = new SimpleAnalyzer();    //SimpleAnalyzer를 통해서 인덱싱을 진행합니다.
    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer);
    IndexWriter writer = new IndexWriter(directory, config); //writer를 통해서 doc를 넣습니다.
    Document doc = new Document();
    doc.add(new Field("Title""The last leaf",Field.Store.YES, Field.Index.ANALYZED));
    doc.add(new Field("Author""O Henry",Field.Store.YES, Field.Index.ANALYZED));
    doc.add(new Field("Summary""Johnsy, a poor young woman who is seriously ill with pneumonia.
     She believes that when the ivy vine on the wall outside her window loses all its leaves, 
    she will also die. ",Field.Store.YES, Field.Index.ANALYZED));
    writer.addDocument(doc);
     
    doc  = new Document();
    doc.add(new Field("Title""What Men Live By",Field.Store.YES, Field.Index.ANALYZED));
    doc.add(new Field("Author""Leo Tolstoy",Field.Store.YES, Field.Index.ANALYZED));
    doc.add(new Field("Summary""Leo Tolstoy Simon was a poor shoemaker who did not have
     house or land of his own. He used to stay in a peasant's house and earned his living
     by work to feed his wife and children.",Field.Store.YES, Field.Index.ANALYZED));
    writer.addDocument(doc);
     
    writer.close();
    cs
    cs



    위에 코드 이해를 돕기 위해 Document를 구성하는 Field에 대해서 알아볼게요. 



    Field

    Field Document Description 저장합니다. 위에 코드에서는 "Title", "Author", "Summary"라는 3개의 필드가 있습니다.

    매 번 writer를 통해 doc를 추가할 때마다 Field를 채워넣는 걸 확인할 수 있습니다. 


    하지만 Field 명과 Field 값말고도 Store.Yes, Field.Index.ANALYZED와 같은 파라미터가 있는 걸 볼 수 있는데요.

    이거는 색인 옵션, 저장 옵션이라고 합니다. 간단히 정리하자면 아래와 같습니다.


    Field 색인 옵션:

    Index.ANALYZED:  해당 필드 값을 분석한다. ex) 제목, 내용,

    Index.NOT_ANALYZED: 해당 필드 값을 분석하지 않는다. 완전 일치해야한다. ex) 전화번호, 이메일주소,

    Index.NO: 해당 Field값은 인덱싱되지 않는다.

     

    Field 저장 옵션:

    Store.YES: Field 값을 온전히 저장한다.

    Store.NO: Field 값을 간추려서 저장한다. (복원 불가능) 해당 Field 값이 경우 쓰임.

     


    그리고 참고로 여러 값을 가진 Field는 아래와 같이 코딩하시면 됩니다.

    //마치 작가처럼 여러 작가들이 문서에 있을 있죠.

    1
    2
    3
    4
    5
    Document doc = new Document();
            for (String author : authors) {
                doc.add(new Field("author", author, Field.Store.YES,
                        Field.Index.ANALYZED));
            }
    cs



    이제 directory에 원하는 doc들을 추가시킬 수 있습니다. 이 정도만 아셔도 lucene의 인덱싱 과정의 기본은 끝냈다고 할 수 있습니다. 

    FSDirectory를 이용해서 directory를 로컬에 저장하거나 커스텀 인덱싱에 대해서는 나중에 심화편에서 다루도록 하겠습니다.



    만약 Weight 수정에 대해서 알고 싶은 분은 아래 더보기를 클릭해주세요.










    사진 출저 및 참고:

    https://www.cnblogs.com/skyme/archive/2012/07/30/2615054.html


    '학교 강의 > 인덱싱' 카테고리의 다른 글

    lucene 으로 검색사이트 만들기 - 1 (개요편)  (0) 2018.11.29

    댓글

Designed by Tistory.