'오픈소스'에 해당되는 글 6건

  1. 2009.04.07 오픈소스 검색서버 SOLR 설치 메뉴얼 5
  2. 2009.04.07 오픈소스 검색서버 SOLR 설치 메뉴얼 4
  3. 2009.04.07 오픈소스 검색서버 SOLR 설치 메뉴얼 3 1
  4. 2009.04.07 오픈소스 검색서버 SOLR 설치 메뉴얼 2
  5. 2009.04.07 오픈소스 검색서버 SOLR 설치 메뉴얼 1
  6. 2007.09.26 2007 JCO 오픈소스 컨퍼런스

오픈소스 검색서버 SOLR 설치 메뉴얼 5

|

5. Solrj API사용법

 

Solrj API 사용하기 위해서는 미리 관련 라이브러리가 추가되어 있어야 한다.

(‘1.5 라이브러리 추가 부분 참조.)

 

 

5.1 데이터 인덱싱

 

5.1.1 Sample Code

 

//CommonsHttpSolrServer객체 생성

CommonsHttpSolrServer server = null;   

       

        String url = "http://localhost:8080/solr/";

        server = new CommonsHttpSolrServer( url );

 

        //인덱싱 데이터

List<OasisDocument> docs = oasisService.getAllDocument();

 

OasisDocument doc = new OasisDocument();

 

doc.setDocId(10000)

doc.setTitle(“what is Solr?”);

doc.setContent(“Solr is an open source enterprise search server based on the Lucene.”)

 

 

//데이터 추가

        server.addBeans(docs);

             server.addBean(doc);

            

        //서버 객체 커밋 (인덱싱)

             server.commit();

 

 

5.2 데이터 검색

 

5.2.1 Sample Code

 

String url = http://localhost:8080/solr/;

CommonsHttpSolrServer server = new CommonsHttpSolrServer( url );

       

SolrQuery query = new SolrQuery();

query.setQuery(“title” + “:” + “solr”);//검색어 셋팅

query.addSortField("docId", SolrQuery.ORDER.asc );//정렬 방식

query.setStart(startNum);//시작 번호(시작번호부터 설정된 개수만큼 가져옴)

 

 

QueryResponse rsp = server.query( query );//검색을 요청하고 응답 저장

 

//검색 결과 가져오기

SolrDocumentList docs = rsp.getResults();

List<BlogLog> docs2 = rsp.getBeans(BlogLog.class);

And

오픈소스 검색서버 SOLR 설치 메뉴얼 4

|

4. DataImportHandler 설정

 

4.1 data-config.xml

 

데이터를 인덱싱할 참조할 data-config.xml파일을 생성해야 한다. 아래의 예와 같이 쿼리 필드 매핑 정보, Transformer 설정등을 있다.

 

<dataConfig>

<dataSource driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@123.456.78.9:1521:ORCL" user="USERNAME" password="PASS1234" />

    <document name="products">

        <entity name="log" query="select * from BLOG_LOG">

            <field column="LOG_ID" name="logId" />

            <field column="BLOG_ID" name="blogId" />

            <field column="MENU_ID" name="menuId" />

            <field column="TITLE" name="title" />

            <field column="REGISTER_NICKNAME" name="registerNickname" />

            <field column="TAGS" name="tags" />

 

            <entity name="contents" query="select contents from BLOG_LOG_CONTENTS where LOG_ID='${log.LOG_ID}'" transformer="netville.blog.util.NetvilleClobTransformer">

                <field name="contents" column="CONTENTS" clob="true" />

            </entity>

           

        </entity>

    </document>

</dataConfig>

 

 

4.2 DataImportHandler 등록

 

solrconfig.xml에서 <config></config> 태그 안에 아래의 설정을 추가한다.

(설정 전에, 관련 라이브러리가 추가되어 있어야 한다. ‘1.5 라이브러리 설치참조.)

 

<!-- DB data import configure -->

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">

    <lst name="defaults">

      <str name="config">/data-config.xml</str>

    </lst>

</requestHandler>

 

 

4.3 ClobTransformer

 

인덱싱을 실시할 필드 , CLOB 타입의 데이터가 있다면 String타입으로 변환해줄 있는 Transformer클래스가 필요하다. 현재 SOLR 1.3.0 버전에서는 ClobTransformer 지원하고 있지 않기 때문에(SOLR v1.4 부터 지원) CLOB타입을 변환해줄 있는 CustomTransformer 생성하여야 한다.

And

오픈소스 검색서버 SOLR 설치 메뉴얼 3

|

3. 형태소 분석기 추가

 

solr에서 기본으로 제공하는 분석기로는 한글 문서의 단어들을 분석하고 인덱싱 하는 데에 한계가 있다(복합명사 ). 때문에 국내에서 진행중인 오픈소스 한글 형태소 분석기인 KoreanAnalyzer 사용할 것을 권장한다.

(jdk 1.5 이상 요구됨)

 

 3.1 다운로드

 

루씬 한글 분석기 오픈소스 카페(http://cafe.naver.com/korlucene.cafe)’ 가입 최신 버전의 source 다운로드 받고 압축을 푼다. Factory 클래스 추가를 위해 source 파일은 반드시 다운로드 받아야 한다.(koreananalyzer-src-20090000.zip)

 

 

3.2 Factory 클래스 추가

 

Solr Server에서 KoreanAnalyzer 사용하기 위해서는 개의 Factory클래스가 필요하다. Factory 클래스를 추가하기 위해서는 아래의 절차를 따른다.

 

l  다운로드 받은 source 이클립스 등의 IDE 새로운 프로젝트로 import 한다.

l  org.apache.lucene.analysis.kr 패키지 밑에, 아래 개의 클래스를 추가한 .jar 파일로 export 한다.

 

package org.apache.lucene.analysis.kr;

 

import org.apache.lucene.analysis.TokenStream;

import org.apache.solr.analysis.BaseTokenFilterFactory;

 

public class KoreanFilterFactory extends BaseTokenFilterFactory {

 

    public TokenStream create(TokenStream input) {

       

        return new KoreanFilter(input);

    }

}

package org.apache.lucene.analysis.kr;

 

import java.io.Reader;

 

import org.apache.lucene.analysis.TokenStream;

import org.apache.solr.analysis.BaseTokenizerFactory;

 

public class KoreanTokenizerFactory extends BaseTokenizerFactory {

 

    public TokenStream create(Reader input) {

       

        return new KoreanTokenizer(input);

    }

}

 

 

 

3.3 설치

 

이클립스에서 적용하고자 하는 프로젝트의 ‘WEB-INF/lib/’ 디렉토리 아래에 koreananalyzer.jar 라이브러리 파일을 복사한다.

 

 

3.4 설정

 

scheme.xml 파일에서 적용하고자 하는 field type에서 아래와 같이 filter tokenizer 설정부분을 수정한다.

 

<types>

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">

      <analyzer type="index">

        <!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->

                           <tokenizer class="org.apache.lucene.analysis.kr.KoreanTokenizerFactory"/>       

                           <filter class="org.apache.lucene.analysis.kr.KoreanFilterFactory"/>

        <filter class="solr.StopFilterFactory"

                ignoreCase="true"

                words="stopwords.txt"

                enablePositionIncrements="true" />

        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>

        <filter class="solr.LowerCaseFilterFactory"/>

        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>

        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

      </analyzer>

      <analyzer type="query">

                           <tokenizer class="org.apache.lucene.analysis.kr.KoreanTokenizerFactory"/>

                           <filter class="org.apache.lucene.analysis.kr.KoreanFilterFactory"/>

        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>

        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>

        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>

        <filter class="solr.LowerCaseFilterFactory"/>

        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>

        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

      </analyzer>

    </fieldType>

</types>

 

 

3.5 단어 사전

 

KoreanAnalyzer 형태소 분석을 위해 단어 사전을 별도로 사용하고 있다. 기본적으로 3만개 정도의 단어를 포함하고 있고 새로운 단어를 추가할 수도 있다.

 

3.5.1 구조 형식

l  total.dic

-        용언과 체언을 포함한 기본 사전,

-        사전의 형식

) 납부, 10011X

콤마를 중심으로 좌측은 단어, 우측은 단어정보임.

-        단어정보 사용규칙

단어정보는 여섯글자로 이루어지고 순서에 따른 내용은 다음과 같음.

1-명사 2-동사 3-기타품사 4-하여동사 5-되어동사 6-불규칙변형

-        불규칙 변형의 종류

B:ㅂ불규칙 H:ㅎ불규칙 L:ㄹ불규칙 S:ㅅ불규칙 D:ㄷ불규칙 R: 불규칙 X:규칙

 

l  extension.dic - 사전을 보완해야 경우 추가 단어 등록을 위해 사용되는 확장 사전

l  josa.dic - 조사 모음.

l  eomi.dic - 어미 모음.

l  prefix.dic - 복합명사 분해 사용할 접두어 모음.

l  suffix.dic - 복합명사 분해 사용할 접미어 모음.

l  compounds.dic -

최장일치법에 의해 분해가 불가능한 복합명사를 등록하기 위한 사전

(- “근로자의날:근로자,”)

 

 

    3.5.1 사전 편집

             단어사전을 수정해야 하는 경우, 아래의 순서를 따른다.

 

l  KoreanAnalyzer source 다운로드 받는다.

l  다운로드 받은 source 이클립스 등의 IDE 새로운 프로젝트로 import 한다.

l  org.apache.lucene.analysis.kr.dic 아래에서 변경이 필요한 사전을 수정한다.

l  .jar 파일로 export 기존의 koreananalyzer.jar 교체하여 사용한다.

And

오픈소스 검색서버 SOLR 설치 메뉴얼 2

|

2. SOLR 설정

 

2.1 scheme.xml 편집

 

SOLR 디렉토리 아래의 scheme.xml 파일을 편집기로 , 도큐먼트의 필드정보를 설정한다.

 

2.1.1 filed속성 정리

 

<fields>

<field name="docId" type="long" indexed="true" stored="true" required="true" />

<field name="categoryId" type="long" indexed="false" stored="true" />

<field name="contents" type="string" indexed="true" stored="true" />

</fields>

 

- name(필수) : 필드의 이름

- type(필수) : <types>영역에 미리 정의된 데이터 타입

- indexed : 인덱싱 여부(true 인덱싱이 되어 검색 정렬이 가능)

- stored : true, 데이터를 보관한다.

- required : 필수로 입력되어야 하는 필드일 경우 true 설정

- compressed : true이면, gzip 이용하여 데이터를 압축해서 저장한다.

                (TextField StrField 타입만 가능하다. )

- multiValued : true이면 해당 필드는 document 마다 여러 개의 값을 가질 있다.

 

 

2.1.2 고유키 설정

 

고유키로 지정된 필드는 중복된 값이 인덱스에 존재할 없고, 만약 인덱싱 시에 동일한 값이 이미 존재한다면, 오래된 문서에 대한 인덱싱 정보는 삭제되고 새로운 정보가 남게 된다.

 

<uniqueKey> docId </uniqueKey>

 

(설정된 필드는 반드시 인덱싱 되어야 한다.)

 

 

2.1.3 기본 검색 필드 설정

 

검색 특정 필드가 지정되지 않은 겨우 기본적으로 검색 대상이 필드를 설정한다.

 

<defaultSearchField>text</defaultSearchField>

 

 

2.1.4 검색 연산자 지정

 

복수개의 단어 검색 적용할 연산자를 설정한다.

(AND -> 모든 단어를 포함, OR –> 하나 이상의 단어를 포함한 컨텐츠 검색)

 

<solrQueryParser defaultOperator="OR"/>

 

 

2.1.5 멀티 인덱싱 설정

 

여러 개의 필드를 하나의 필드처럼 사용해야 경우에 아래와 같이 설정한다. (4번의 검색 연산자 적용 )

 

<copyField source="title" dest="text"/>

<copyField source="contents" dest="text"/>

 

 

2.2 필터 매핑 설정

 

WEB-INF/web.xml 파일에서 아래처럼 디스패처 필터의 매핑 설정을 추가한다.

 

<filter>

    <filter-name>SolrRequestFilter</filter-name>

    <filter-class>org.apache.solr.servlet.SolrDispatchFilter</filter-class>

</filter>

 

<filter-mapping>

    <filter-name>SolrRequestFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

And

오픈소스 검색서버 SOLR 설치 메뉴얼 1

|

프로젝트 적용을 위해 조사하고 정리했던 내용 공개합니다.
문제 소지가 있다면 삭제하겠습니다.
하나의 프로젝트에 적용하기 위한 방법이므로,
경우에 따라 적용 방법이 이 메뉴얼과 다를 수 있습니다.


1. SOLR 설치

 

1.1 환경 요구사항

- 자바5 또는 이상을 필요로 한다.

- 톰캣, 제티, 레진과 같은 서블릿 컨테이너가 필요하다.

 

 

1.2 다운로드

 

아래 경로를 통해 검색서버 SOLR 최신 버전을 다운로드한다. (현재 최신버전은 apache-solr-1.3.0)

 

http://mirror.apache.or.kr/lucene/solr/

 

 

1.3 기본 디렉토리 설정

 

SOLR 구동시키기 위해서는 ‘SOLR 디렉토리 설정해야 한다. 임의의 경로를 설정하지 않을 경우 디폴트 디렉토리로 JVM’s Current Working Directory($CWD/solr) 자동 설정된다.

 

디렉토리 설정을 하기 위해 아래의 명령으로 자바 시스템 프로퍼티로 지정해야한다.

 

 > export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/my/custom/solr/home/dir/"

 

다운로드 받은 압축파일을 압축 해제한 , ‘apache-solr-1.3.0/example/solr/’ 디렉토리 안의 모든 디렉토리 파일들을 위에서 설정한 ‘SOLR 디렉토리 복사한다.

 

 

1.4 라이브러리 설치

 

Solr 사용하기 위해서는 개의 라이브러리를 추가해야 한다. 압축을 풀면 나오는 아래의 라이브러리들을 적용하고자 하는 프로젝트의 ‘/WEB-INF/lib/’ 디렉토리로 이동시키면 된다.

 

-       apache-solr-1.3.0/lib 폴더 아래의 모든 라이브러리 파일

-       apache-solr-1.3.0/dist/apache-solr-common-1.3.0.jar

-       apache-solr-1.3.0/dist/apache-solr-core-1.3.0.jar

-       apache-solr-1.3.0/dist/apache-solr-dataimporthandler-1.3.0.jar (DataImportHandler사용시 필요)

-       apache-solr-1.3.0/dist/apache-solr-solrj-1.3.0 (Solrj API 사용시 필요)

-       apache-solr-1.3.0/dist/solrj-lib 폴더 아래의 모든 라이브러리 파일 (Solrj API 사용시 필요)

 

* 중복되는 라이브러리가 존재할 경우 가장 최신의 것을 사용해야 한다. 그렇지 않으면 예상치 못한 오류가 발생할 있다.

 


And

2007 JCO 오픈소스 컨퍼런스

|
And
prev | 1 | next