본문 바로가기

Lucene

[lucene] Token과 Tokenizer Token과 TokenStream 단어가 분석기를 거쳐서 토큰으로 변환되고, 토큰은 다시 텀으로 변환되어 색인에 저장된다. 하나의 토큰은 텍스트에서 얻어낸 하나의 단어를 의미하며, 시작위치, 끝위치, 토큰종류, 위치증가값등의 메타 정보를 갖는다. (the quick brown fox 같은 경우 각 토큰은 이전 토큰에 대해 한 단어만큼 뒤에 있기 때문에 모두 각각 1씩의 위치 증가값을 갖는다.) 토큰이 텀의 형태로 색인에 전달되는데 토큰의 단어와 위치 증가값만 사용된다. 토큰의 위치증가값이 1보다 큰 경우에는 단어와 단어가 떨어져 있다는 것이고, 0이라면 토큰의 위치가 이전 토큰과 같다는 의미이다. TokenStream에는 Tokenizer와 TokenFilter가 있다. Tokenizer는 글자 단위로 .. 더보기
[lucene] PharseQuery PharseQuery 색인에는 텀의 위치 정보가 있음. 두개의 텀 사이의 정확한 거리가 얼마인지에 대한 정보를 가지고 문서를 찾아냄. 검색하려는 텀을 본문의 텀과 일치시키는 방향으로 움직일 수 있는 이동 횟수의 최대값. -> 슬롭(slop)값 기본값은 0으로 정확히 일치하는 문장을 찾음. test 구문 the quick brown fox jumped over the lazy dog slop 0이면 quick fox 로 검색하면 검색 안됨 slop 1이면 검색 됨 fox를 한번만 움직이면 quick [brown] fox 가 되기 때문. 만약 fox quick으로 검색하면 fox를 3번 움직여야 quick [brown] fox가 됨. 다중텀도 지원한다. 한 문장에서 얼마나 많은 텀을 사용하는지에 관계 없이 .. 더보기
[lucene] 질의분석. QueryParser .. 질의를 파싱하는 거.. Query query = QueryParser.parse("+리바이스 +청바지", "prd_name", new CJKAnalyzer()); Searcher searcher = new IndexSearcher(dir); searcher.search(query); 이렇게 하거나... Analyzer analyzer = new CJKAnalyzer(); QueryParser parser = new QueryParser("prd_name",analyzer); parser.setDefaultOperator(QueryParser.AND_OPERATOR); Query query = parser.parse("리바이스 청바지"); Searcher searcher = new IndexSearcher.. 더보기
[lucene] 색인 (Document 추가/삭제/갱신, 가중치) Document의 변형 - 동일한 색인에서 하나의 Document에 서로 다른 여러개의 Field 집합을 가질 수 있다. 즉, '이름' ,'가격' Field를 가지는 Document나 '이름', '나이', '성별'을 가지는 Document를 색인 하나에 동시에 추가 할 수 있다. -> 일반적인 검색엔진과 좀 다른 구조인듯... String keyword = "dog"; String synonym [] = String {...}; Document doc = new Document(); Field field = new Field("word", keyword, Field.Store.YES, Field.Index.TOKENIZED); doc.add(field); for(int i = 0; i < synonym... 더보기
[lucene] 색인과 검색 이번 루씬 프로젝트를 시작하면서.. 색인 : // indexWriter를 생성한다. 경로와 분석기를 넘겨줌 IndexWriter writer = new IndexWriter(indexDir,new StandardAnalyzer(), true); // 복합파일이냐 멀티파일이냐.. (추후설명) writer.setUseCompoundFile(false); // 색인에 추가될 Document 생성 Document doc = new Document(); //Document에 필드 추가 doc.add(Field.Text("contents", new FileReader(f))); doc.add(Field.Keyword("filename", f.getCanonicalPath())); //색인에 Document 추가 w.. 더보기