디앤샵상품권
21세기 글로벌 미디어 기업을 지향하는 다음(www.daum.net)이 10월 6일까지
서비스 기획, 마케팅, 개발 등 전분야에 걸쳐 2008년 하반기 신입사원을 모집합니다.
보다 나아진 즐거운 세상을 꿈꾸고, 과감하게 도전할 여러분을 Daum이 기다립니다.
1. 모집부문 및 인원
- 모집 부문 : 개발, 기획, 영업, 마케팅, 경영관리, 디자인
- 모집 인원 : 00명
2. 전형단계
- 온라인 입사지원 => 서류심사 => 직무능력테스트 => 인적성 검사 => 1차 직무면접 => 2차 인성면접 => 최종합격
* 서류전형 : 필요 요건 및 직무 경력과 지원 동기를 중점으로 심사
용어 | 설명 |
indexing | 인덱싱이란 인덱스를 생성하는 처리 과정이다. 인덱스는 컴파일된 문서들의 버전을 포함하고 있는 특별한 데이터베이스이며, 특정 단어들(term)들을 포함하고 있는 문서 목록을 빠르게 찾을 수 있도록 최적화 되어 있다. 대개 이러한 인덱스들은 선택된 한 디렉토리에 Lucene이 생성한 일련의 파일들에 저장된다. |
analyzer | Analyzer는 인덱싱 동안 문서의 내용을 어떻게 term(단어들)들로 쪼개야 할지에 대해 제어하는 클래스이다. 예를 들면, 어떤 한 analyzer는 "The ill dogs"라는 텍스트를 소문자로 바꾸어 "the", "ill, dogs"의 형태로 쪼개는 반면, 다른 한 analyzer는 소문자로 변환하고 복수형태는 단수 형태로 정규화 하며 일반적인 단어인 "the"는 제거한 형태인 "ill", "dog"라고 쪼갤 수도 있다. 어떤 analyzer를 사용할지 선택하는 것이 중요하다. |
searching | 이는 원하는 내용을 포함하고 있는 문서의 일부나 몇몇 지정한 사항들과 일치하는 문서의 속성들을 찾는 과정(operation)이다. search 연산은 미리 컴파일된 문서들을 포함하고 있는 특수한 데이터인 '인덱스'에 대해 수행된다. 인덱스 데이터베이스는 "인덱싱" 과정 동안 생성된다. |
query | 일반적으로 query는 문서를 선택하기 위한 criteria를 지정하며, searching은 문서 인덱스와 query를 비교하고 query와 일치하는 것들을 찾음으로써 이루어진다. query의 결과로 해당 criteria와 일치하는 문서들의 목록(hits)을 얻게 된다. |
document | Lucene에서 사용하는 문서를 나타낸다. 문서를 나타내기 위해 Document라는 클래스가 제공된다. 이 클래스의 인스턴스는 인덱싱 과정 동안은 인덱스에 추가될 문서들의 정보를 나타내며 검색 동안은 검색의 명중율(hits)을 나타낸다. |
field | 문서와 hit 정보는 Document 클래스에 필드들의 목록으로 표현된다. 각각의 필드는 이름(String)과 값(문자열이 추출될 수 있는 String이나 Reader)를 포함하고 있다. 또한 각각의 필드는 세 가지 boolean 속성을 갖는데, 이들의 조합은 인덱싱 동안 필드가 사용되는 방법을 지정한다. 이들 속성은 isIndexed, isStored, isTokenized이다. |
hit | 이것은 query의 결과이며, 지정된 query와 일치하는 문서들의 목록을 말한다. hit 목록은 일반적으로 ranking이나 scoring라 불리는 몇몇 관련 정도의 단위로 정렬된다. hit 목록에는 질의와 일치하는 문서들(매우 높은 score를 가진 문서들)로 이루어진 것들 중의 일부분만을 포함할 수도 한다. |
terms | 일반적으로 terms는 단어(words)라고 생각할 수 있다. 예를 들면, 문자열 "yadda yadda yadda"는 세 개의 terms를 포함하고 있으며, 이들 각각의 terms는 "yadda"라는 값을 가지고 있다. Lucene이나 대부분의 검색 엔진에서 terms는 인덱싱과 검색을 위한 기본적인 단위이다. terms 값들은 대소문자를 구별한다. 영어나 라틴 언어가 아닌 다른 언어의 텍스트를 terms들로 쪼갤 필요가 있는 경우 규칙들을 커스터마이징 할 수 있다. |
tokenizing | 한 문자열을 terms들로 쪼개는 과정. tokenizing은 Analyzer 객체를 사용해 생성되는 TokenStream의 인스턴스들에 의해 수행된다. 만약 한 문서의 필드가 인덱싱 과정 동안 "tokenize하지 않도록" 지정되었다면, 필드의 전체 내용이 단일 term으로 간주된다(URL인 경우 유용). |
term query | Lucene에서의 매우 단순한 질의이며 한 단어와 비교하는 경우에 사용된다. TermQuery 클래스로 표현되며 term과 필드 이름을 포함하고 있다. |
boost factor | query 구조와 일치하는 문서의 랭킹을 증가시키거나 감소시키는데 사용될 수 있는 factor. |
phrase query | 필드에서 연속된 일련의 terms들에 대해 일치하는지를 비교하는 query를 나타낸다. 예를 들면, "winding road"는 "winding road"와는 일치해야 하지만 "road winding"와는 일치하지 않는다. PhraseQuery 클래스 인스턴스로 표현된다. 이 인스턴스는 일치하는 terms들을 표현하는 정렬된 Term 객체들로 이루어진 리스트를 포함한다. |
boolean query | "AND", "OR", "NOT"과 같은 규칙들을 사용한 복합 질의를 나타낸다. BooleanQuery 클래스의 인스턴스로 표현된다. 각각의 객체는 BooleanClause라는 어댑터 클래스의 인스턴스를 사용해 연결된 하위 질의들의 목록을 포함하고 있다. |
filtering | hit 목록에 대해 추가적인 제한을 가해 검색 결과에 영향을 주는 것을 말한다. |
클래스 이름 | 설명 |
IndexWriter | 인덱스를 만들고 유지한다. 생성자의 인자들은 위에서 설명한 것과 동일하다. Document들을 추가하는 작업이 종료된 후에는 반드시 이 객체의 close 메소드를 통해 닫아주어야 한다. 만약 잠시 동안 추가될 Document들이 더 이상 없고 검색 성능을 높이기 위한 최적화를 수행하고자 할 경우, close 메소드 호출 전에 optimize 메소드를 호출할 수도 있다. |
Analyzer | 텍스트를 분석하는 TokenStream들을 만들어준다. 즉, 문서를 인덱싱 하거나 검새갈 때 핵심이 되는 요소로서, 텍스트를 파싱 할 때 사용된다. |
StandardAnalyzer | 추상 클래스 Analyzer를 구현한 클래스이다. 아스키 코드, 라틴권 문자와 언어 문법을 기반으로 한 analyzer이다. stop word에 대해서는 인덱싱 처리를 하지 않는다. |
WhitespaceAnalyzer | 추상 클래스 Analyzer를 구현한 클래스이다. 공백 문자를 기준으로 인덱싱 작업을 한다. |
SimpleAnalyzer | 공백과 하이픈을 사용해 단어를 구분하여 인덱싱 작업을 한다. |
Document | Document는 한 문서에 대한 정보를 담고 있다. Document는 인덱싱과 검색의 단위이며, 필드들로 이루어져 있다. 각각의 필드는 이름과 텍스트 값을 가지고 있다. 대개 Document는 하나 이상의 stored 필드들을 갖는다. |
Field | 필드는 Document의 일부를 구성한다. 각각의 필드는 이름과 값이라는 두 가지 부분을 갖는다. 값들은 String이나 Reader로 제공되는 형태의 텍스트나 atomic한 keyword들일 수 있다. 필드들은 선택적으로 인덱스에 저장되어 검색된 문서와 함께 반환될 수 있다. Field에는 Keyword, UnIndexed, UnStored, Text라는 네 가지 타입이 있다. |
Field.Text | 텍스트 데이터를 토큰으로 구분하여 인덱싱 작업을 수행하며, 그 값을 인덱스에 저장한다. |
Field.Keyword | 텍스트 데이터를 토큰으로 나누지 않는다. 인덱싱 작업을 처리하며 텍스트 데이터 그대로 인덱스에 저장된다. |
Field.UnIndexed | 텍스트 데이터를 토큰으로 분리하지 않고, 인덱싱 작업도 처리하지 않는다. 텍스트 데이터는 그대로 저장한다. |
Field.UnStored | 텍스트 데이터를 토큰으로 분리하고 인덱싱 작업도 처리하지만, 텍스트 데이터는 저장하지 않는다. |
클래스 이름 | 설명 |
Searcher | 검색 구현을 위한 abstract base 클래스이다. 몇몇 일반적인 유틸리티 메소드들을 구현하고 있다. |
IndexSearcher | 단일 IndexReader에 대한 검색을 구현한 클래스이다. 어플리케이션에서는 상속된 Searcher.search(Query)나 Searcher.search(Query, Filter) 메소드를 호출한다. |
QueryParser | 이 클래스는 JavaCC에 의해 생성된다. 클라이언트에서는 parse() 메소드를 호출하게 된다. 이 메소드는 질의 문자열을 파싱 하여 Query를 반환한다. |
Query | 질의를 위한 abstract base 클래스이다. |
Hits | 순위가 매겨진 Document들의 목록이며, 검색 결과를 저장하고 유지하는데 사용된다. |
title:"The Right Way" AND text:go 또는 title:"Do it right" AND right
단일 문자 와일드카드 검색의 예: "text"나 "test"를 검색하려면, te?t의 형태로 검색할 수 있다. 다수 문자 와일드카드 검색의 예: "test", "tests", "tester"를 검색하려 한다면, test* 형태로 검색한다.
mod_date:[20020101 TO 20030101]
title:{Aida TO Carmen}
Lucene Home | http://jakarta.apache.org/lucene/ |
Lucene FAQ | http://lucene.sourceforge.net/cgi-bin/faq/faqmanager.cgi |
Lucene Getting Started | http://jakarta.apache.org/lucene/docs/gettingstarted.html |
고수로 가는 지름길 Jakarta Project 가메출판사 | 최범균 저 |
QueryParser Rules | http://today.java.net/pub/a/today/2003/11/07/QueryParserRules.html |
Give your Web site its own search engine using Lucene | http://builder.com.com/5100-6389-5054799.html |
Lucene Intro | http://today.java.net/pub/a/today/2003/07/30/LuceneIntro.html |
Parsing, indexing, and searching XML with Digester and Lucene | http://www-106.ibm.com/developerworks/library/j-lucene/ |
Advanced Text Indexing with Lucene | http://www.onjava.com/pub/a/onjava/2003/03/05/lucene.html |
Introduction to Text Indexing with Apache Jakarta Lucene | http://www.onjava.com/pub/a/onjava/2003/01/15/lucene.html |
The Lucene search engine Powerful flexible and free | http://www.javaworld.com/javaworld/jw-09-2000/jw-0915-lucene.html |
Lucene 바이너리 다운로드 | http://jakarta.apache.org/site/binindex.cgi |
Lucene 소스 다운로드 | http://jakarta.apache.org/site/sourceindex.cgi |
java org.apache.lucene.demo.IndexFiles C:ApacheJakartalucene-1.4-finalsrc
java org.apache.lucene.demo.SearchFiles
IndexWriter writer = new IndexWriter("index", new StandardAnalyzer(), true);
public static void indexDocs(IndexWriter writer, File file) throws IOException {
if (file.canRead()) {
if (file.isDirectory()) {
String[] files = file.list();
if (files != null) {
for (int i = 0; i < files.length; i++) {
indexDocs(writer, new File(file, files[i]));
}
}
} else {
System.out.println("adding " + file);
try {
writer.addDocument(FileDocument.Document(file));
} catch (FileNotFoundException fnfe) {
}
}
}
}
Searcher searcher = new IndexSearcher("index");
Analyzer analyzer = new StandardAnalyzer();
Query query = QueryParser.parse(line, "contents", analyzer);
Hits hits = searcher.search(query);
for (int start = 0; start < hits.length(); start += HITS_PER_PAGE) {
int end = Math.min(hits.length(), start + HITS_PER_PAGE);
for (int i = start; i < end; i++) {
Document doc = hits.doc(i);
String path = doc.get("path");
if (path != null) {
System.out.println(i + ". " + path);
} else {
String url = doc.get("url");
if (url != null) {
System.out.println(i + ". " + url);
System.out.println(" - " + doc.get("title"));
} else {
System.out.println(i + ". " + "No path nor URL for this document");
}
}
}
if (hits.length() > end) {
System.out.print("more (y/n) ? ");
line = in.readLine();
if (line.length() == 0 || line.charAt(0) == 'n')
break;
}
}
java org.apache.lucene.demo.IndexHTML -create -index C:ApacheJakartaTomcat-5.0luceneIndex ..
참고 사이트 : http://blog.naver.com/NBlogMain.nhn?blogId=okaydanky&Redirect=Dlog&Qs=%2Fokaydanky%2F5815700&
I. Welcom to Lucene !
Lucene 은 자바로 구현된 고성능의 풀텍스트 검색엔진입니다
Lucene 이 제공하는 API를 사용하여 강력하고 유연한 검색기능을 어플리케이션에 손쉽게 추가할 수 있습니다
Lucene은 2005년 2월에 Apache top-level 로 등급이 상승하였고
서브 프로젝트인 Nutch 또한 2005년 6월에 Apache Incubator를 졸업하였습니다
Lucene는 다음 3가지 software를 포함하고 있습니다
이번 강좌에서는 Lucene java 함 뒤벼보고 웹에다 Lucene을 달아봅시다 ^^
강좌 진행 순서는 "데모I 프로그램(어플리 케이션) -> 데모II 프로그램(웹 어플리케이션) -> 데모II 프로그램 수정" 순으로 갑니다
ps. 한글검색이 가능하지만 한글 형태소 분석을 아직까지는 지원하지 않기 때문에
한글은 단순검색으로 만족해야 합니다.
하지만 영문은 기똥차게 잘됩니다
II. Download
lucene 다운로드
http://www.apache.org/dyn/closer.cgi/jakarta/lucene/binaries/
참고 사이트
http://lucene.apache.org/java/docs/api/index.html
http://lucene.apache.org/java/docs/index.html
http://today.java.net/pub/a/today/2003/11/07/QueryParserRules.html
http://www-128.ibm.com/developerworks/library/j-lucene/
http://www.onjava.com/pub/a/onjava/2003/03/05/lucene.html
III. 설치
그럼 이제 Lucene에 한번 빠져 봅시다~!
① 다운받은 lucene-1.4.3.zip 파일을 C:\에 압축을 풉니다
② 압축을 풀면 lucene-1.4.3.jar와 lucene-demos-1.4.3.jar 파일을 클래스 패스에 겁니다
"set" 명령으로 확인합니다
설치 끝 ~
IV. 데모I 실행하기
Lucene 데모에는 두가지 데모가 있습니다
하나는 일반적인 인덱싱, 및 검색이고 다른 하나는 웹에서 사용하기 위한 인덱싱 및 웹검색입니다
1) 데모I 실행
먼저 네이버나 야후같은 웹 검색엔진을 생각해 봅시다
수도없이 많은 문서들이 어떻게 해서 그렇게 빠릴 검색될까요?
바로 검색 전처리 작업을 하기 때문입니다
예를들어 간단하게 보자면 "love"라는 단어는 A문서, B문서, C문서에 포함되어 있다라는 정보를 미리 만들어 두는 것입니다
즉 인덱스를 만들어 두는 것이지요
그리고 웹로봇들이 문서를 수집해오면 추가된 문서들에 대해 하루에 몇번씩 배치작업으로 인덱스를 추가해 주겠지요
결과적으로 "love" 검색시 인덱스 정보를 뒤져서 A문서, B문서, C문서의 결과를 보여주는 겁니다
lucene도 마찬가지 입니다 인덱스를 먼저 만들어 주어야 합니다
먼저 일단 데모프로그램을 이용하여 인덱스를 만들어 보고 이를 이용하여 검색해 봅시다
내부 코딩은 일단 실행 이후에 살펴봅시다 ^_^ (눈에 먼저 보여야 멀 해도 잘되죵)
C:\lucene-1.4.3\src\ 는 데모을 위한 자바소스 파일입니다
① 인덱스 생성하기
다음 명령으로 인덱스를 생성해 봅시다
인덱스 생성 어플리케이션은 IndexFiles.java 이며 파라미터는 인덱스를 만들 소스파일들(검색대상파일들) 입니다
여기서는 lucene의 document를 index 처리해 보겠습니다
야호~ 인덱스가 생성되었습니다
C:\lucene-1.4.3\index 풀더를보면 다음 파일들이 생성된 것을 알수있습니다
② 검색하기
검색 어플리케이션은 SearchFiles.java 이며 실행 후 Query: 에 검색할 단어를 입력해 봅시다
와~ 성공! 엄청 빠릅니다!!
검색결과가 10개씩 리스팅되며 다음 리스트는 y버튼을 클릭하여 조회 할수 있습니다
2) 데모I 인덱싱 코드 분석
이 데모 프로그램은 가장 기본이 되는 프로그램으로 핵심 코딩만 되어 있으니 lucene을 사용하기 위해서는 꼭 알아 두어야 합니다
① Analyzer 선택
Analyer 는 문서를 인덱싱 하거나 검색할때 핵심이 되는 요소로서, 텍스트를 파싱할 때 사용합니다 Analyzer의 종류에는 다음 몇가지 들이 있습니다
② IndexWriter 생성
자 이제 Analyer를 선택했으면 IndexWriter를 생성하여 Index를 만들어봅시다
첫번째 파라미터는 index가 생성될 위치를 말하며
두번째 파라미터는 선택한 Analyzer를,
세번째 파라미터는 index를 초기화 하여 다시 생성할것인지 말것인지를 말합니다
즉 추가/삭제만 할 것인지(false) 새로 만들것인지(true)를 나타냅니다
문서가 많을경우 매번 새로 만들수 없으며,
또한 만약 몇개의 문서만 변경되었는데 모두 다시 인덱스를 만들수는 없기 때문입니다 (시간 상당히 걸림 --)
③ Index에 document 추가
다음으로 소스 디렉토리(검색대상 문서들)의 파일들을 읽어가며 Analyzer에 의해 파싱된 문서 정보를 인덱스에 추가합니다
④ index optimize
마지막으로 인덱싱한 정보를 하나의 파일로 merge 합니다
즉 검색에 적합하도록 파일을 하나로 합치는 겁니다
⑤ index close
사용후 받드시 close 합시다!
끝~ 간단하죠?
이제 전체 소스를 살펴봅시다
소스는 C:\lucene-1.4.3\src\demo\org\apache\lucene\demo 에 있습니다
org.apache.lucene.demo.IndexFiles.java
3) 데모I 검색 코드분석
검색은 인덱스를 만드는 코드보다 훨씬 쉽습니다
① IndexSearcher 생성
실질적으로 검색을 담당할 IndexSearcher를 생성해 봅시다
파라미터로는 index가 생성되어있는 위치를 입력합니다
② Query 생성
Query는 질의 문자열을 파싱해 줍니다 (즉 AND,OR,NOT,!,-등의 논리연산이나 와일드카드 *,?등을 파싱합니다)
첫번째 파라미터는 질의를,
두번째 파라미터는 검색 필드를,
세번째 파라미터는 인덱스를 만든 Analyzer와 동일한 Analyzer를 입력해 줘야 합니다
③ 검색 및 검색한 결과 저장
파싱된 쿼리를 가지고 검색하여 그 결과값을 반환 받습니다
반환된 Hits 클래스는 순위가 매겨진 문서들로 검색결과를 저장하고 유지합니다
④ IndexSearcher close
검색이 끝났으면 닫아줍시다
전체 소스를 살펴봅시다
org.apache.lucene.demo.SearchFiles.java
V. 질의 문법
질의 문법에 대해 알아봅시다
① A AND B
A와 B가 모두 포함된 문서를 검색한다
② A OR B
A혹은 B가 포함된 문서를 검색한다
③ A NOT B
A는 포함되고 B는 포함되지 않는 문서를 검색한다
A ! B, A - B와 동일하다
④ +A OR B
A OR B에서 A는 받드시 포함된 문서를 검색한다
⑤ A*
A로 시작하는 단어가 있는 문서를 검색한다
⑥ A?
A로 시작하는 두글자의 단어가 있는 문서를 검색한다
⑦ A~
A와 스펠링이 비슷한 글자를 지닌 단어가 있는 문서를 검색한다
⑧ (A OR B) AND C
논리연산의 그루핑 또한 지원한다
AND, OR, NOT등은 반드시 대문자로 입력해야 인식됩니다
다음 시간에는 두번째 데모 프로그램을 실행시켜 보고 lucene을 웹 어플리케이션에 달아 봅시다~
=============================================
본문서는 자유롭게 배포/복사 할수 있지만
이문서의 저자에 대한 언급을 삭제하시면 안됩니다
저자 : GoodBug (unicorn@jakartaproject.com)
최초 : http://www.jakartaproject.com
=============================================