'작업노트'에 해당되는 글 100건

  1. 2009.07.17 Java TimeZone 관련 링크
  2. 2009.07.17 [Struts2] radio 태그에서 선택값 유지시키기
  3. 2009.04.20 NNTP, Usenet, UUCP 간략한 정의
  4. 2009.04.07 오픈소스 검색서버 SOLR 설치 메뉴얼 5
  5. 2009.04.07 오픈소스 검색서버 SOLR 설치 메뉴얼 4
  6. 2009.04.07 오픈소스 검색서버 SOLR 설치 메뉴얼 3 1
  7. 2009.04.07 오픈소스 검색서버 SOLR 설치 메뉴얼 2
  8. 2009.04.07 오픈소스 검색서버 SOLR 설치 메뉴얼 1
  9. 2009.03.15 시작이란 추억.
  10. 2009.03.13 scrollHeight / clientHeight / scrollTop

Java TimeZone 관련 링크

|

'작업노트 > JAVA' 카테고리의 다른 글

자바의 가비지 콜렉터(Gavage Collector)  (0) 2010.07.27
CSV파일  (0) 2009.03.02
자바 5 에서의 반복자와 컬렉션(for/in 반복문)  (0) 2008.02.28
Java API Map  (0) 2008.01.05
JVM 메모리구조와 스택 - 참조 ^^  (0) 2007.11.19
And

[Struts2] radio 태그에서 선택값 유지시키기

|

지금 보고있는 책에는 이런 간단한 예제 조차 나와있지 않다.
그래서 구글링을 해보니 상당히 매우 간단한 방법으로 해결할 수 있었다.

그냥 action에서 해당 property에 값을 넣어주면 된다.

radio 의 name이 color 라면 action에서 color에 'blue'를 미리 넣어주면,
jsp에서 blue가 선택된다. 물론 value값이 blue인게 있어야 하겠다..

그리고 select 태그도 마찬가지 이다..
And

NNTP, Usenet, UUCP 간략한 정의

|

The Network News Transfer Protocol or NNTP is an Internet application protocol used primarily for reading and posting Usenet articles (aka netnews), as well as transferring news among news servers. - Wikipedia -

Usenet, a portmanteau of "user" and "network", is a worldwide distributed Internet discussion system. It evolved from the general purpose UUCP architecture of the same name. - Wikipedia -

UUCP is an abbreviation for Unix-to-Unix Copy Program. The term generally refers to a suite of computer programs and protocols allowing remote execution of commands and transfer of files, email and netnews between computers. - Wikipedia -


Usenet
User Network(사용자 네트워크)의 약어이다. 유즈넷전자게시판의 일종으로 특정한 주제나 관심사에 대해 의견을 게시하거나 관련 분야에 대한 그림, 동영상, 실행파일, 데이터파일 등의 자료를 등록할 수 있는 전세계적인 토론 시스템이다. 1979년 미국 듀크대학교 대학원생이던 톰 트루스코트(Tom Truscott)와 짐 엘리스(Jim Ellis)의 정보교환에 대한 아이디어로 처음 시작되어 네트워크를 통해 서로의 의견을 교환하다가 발전되었다.

올라온 정보를 보기만 하는 웹과 달리 PC통신의 게시판처럼 다른 사용자와 각종 자료를 주고 받으며 토론도 벌일 수 있어 동호인이나 같은 분야에 관심을 가진 네티즌이 모이는 곳이다. 유즈넷은 특정한 분야에 대한 정보를 다루기 때문에 유용한 정보를 빠르게 찾을 수 있고, 서로 정보를 교환하며 도움을 주고받을 수도 있다.

유즈넷에 마련된 하나하나의 토론집단을 '뉴스그룹'이라 한다. 전세계적으로 수많은 사용자가 있고 특별히 통제력을 갖는 조직은 없으나, 뉴스그룹을 관리하는 관리자가 있어 해당 뉴스그룹에 대해 권한을 가지므로 그룹에 적합하지 않은 글은 삭제될 수 있고 특정인의 접속을 허가하지 않을 수도 있다.

유즈넷은 특정 전문가집단에 의해 운영되는 것이 아니라 인터넷을 사용하는 모든 사람들이 자발적으로 참여해 운영되기 때문에 다양한 내용을 갖는 것이 특징이다. 그러나 한편으로 뉴스그룹에는 토론주제에 관한 전문가와 관계자들이 많이 참여해 서로 공개적으로 의견을 나누기 때문에 고급 정보도 얻을 수 있다. - 네이버 백과사전 -
And

오픈소스 검색서버 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

시작이란 추억.

|


고2때였던걸로 기억한다.
게임 제작자가 되고 싶었던 나는 게임 시나리오 대회에도 나가보고
프로그래밍 공부도 시작했었다.
그게 내가 처음 프로그래밍을 시작하게 된 계기였다.

처음에는 C언어 입문서를 사서  Turbo C라는 도스용 컴파일러로 공부를 했었다.
하지만 슬슬 도스프로그램에 대한 답답함이 밀려왔고,
비주얼 C++이란 녀석의 존재를 알게 되어
용산에 가서 만원-당시 나에겐 거금이었던-을 주고 불법씨디를 사왔었다.
(그때만해도 온라인상의 어둠의 경로가 그리 활성화되어있지 않았다ㅋ)

그녀석이 바로 저 녀석이다.
나를 플밍의 세계로 끌어들인 녀석...
방정리 하다가 발견했는데 1년 정도 프로그래머로 일해본 뒤에 보니 감회가 새롭다..
난.. 저녀석에게 감사해야할까, 원망해야할까..? ㅋㅋ

그 때부터 꾸준히 공부했으면 지금쯤 난 엄청난 실력자가 되있었을 텐데
라는 생각을 하며
미소인지 먼지 모를 표정을 지어본다. ㅎㅎ

(불법을 써서 미안하다는 말을 MS에 뒤늦게 남아 전달하고싶다-_-ㅋ
가난한 고등학생이였으니 이해바람ㅋ)

'작업노트 > Developer's Diary' 카테고리의 다른 글

빨래를 해야겠어요  (0) 2010.10.05
면접을 보고 왔다..  (0) 2010.08.24
습관  (0) 2008.11.04
묻기, 확실히 하기  (0) 2008.09.19
팀 작업을 할때에...  (0) 2008.09.04
And

scrollHeight / clientHeight / scrollTop

|

http://www.sunspell.net/160

좋은 글이다..
And
prev | 1 | 2 | 3 | 4 | 5 | ··· | 10 | next