개발하면서/코드보면서
-
python string 다루기개발하면서/코드보면서 2011. 10. 13. 08:07
PS를 하다보면 string을 자유롭게 다뤄야하는데 내가 직접 짜고 다른 사람이 짠 해답을 보면 built-in method로 깔끔하게 구현한게 있을때 현타가 온다. python string의 built-in method와 slices를 알아보고 대강 어떤게 있는지 살펴보기로 한다. built-in Method str.isXXX 알파벳, 숫자, 알파벳+숫자, 아스키 코드, 대/소문자 여부를 판단할때 사용한다. str.center(width, [fillchar]), str.ljust(width, [fillchar]), str.rjust(width, [fillchar]) 문자열 가운데 정렬/왼족 정렬/오른쪽 정렬 str.count(sub[, start[, end]]) 문자열 안에 sub이 발생하는 횟수 st..
-
[Fastcat] Search에 대해 알아보자 (1)개발하면서/코드보면서 2011. 9. 10. 14:45
지금까지 fastcat의 인덱싱, 사전에 대해 알아보았습니다. 남은건 Search.....훑어봤는데.....어후;;; 길어질것 같아요 ㅋㅋ 제가 학습한 것들을 최대한 알기 쉽게 설명하는게 이 블로그의 목적입니다. 제가 이해된 부분, 추측하는것들이 있으니 틀린점, 애매한점 이런거 알려주시면 감사하겠습니다. 환영합니다~! : ) 피드백 하나가 포스트에 힘을 실어줍니다 ㅋㅋㅋ Search에 대해 알아보도록 하겠습니다. (편의상 존댓말은 생략합니다.) -------------------------------------------------------------------------------------------- 우선 Search 부분의 class Diagram은 다음과 같다. loadSearcherAndRe..
-
[Fastcat] 사전에 대해서 알아보자.개발하면서/코드보면서 2011. 9. 9. 03:16
검색엔진을 만들다 보면, 색인어로 등록 하면 안될 키워드가 있고(섹스, 도박, 자살 등등) 서로 비슷한 키워드가 있다.(LG, 엘지, 앨지 이런것들...) fastcat에서는 한글 형태소 분석할때 사용하는 사전, 유의어 사전, 금지어 사전, 사용자 등록 사전이 있다. 그럼 이 사전을 어디다가 쓰느냐? 색인시, 키워드를 추출할때 사용하기도 하고, 검색 질의가 왔을때 질의를 분석할때 사용하기도 한다. 만약에 사전이 없다면 색인어로 나이키가 있는데, 사용자가 nike를 쳤을때 검색이 안되는 뭐 그런..(비유가 맞나?;;) SearchFieldReader.java, KoreanNounExtractor.java 에서 사용하고 있다. 사전의 용도를 알았으니 fastcat에서는 어떤 자료구조로 사전을 구성했는지 알아..
-
[Fastcat] FullIndex를 알아보자. (3)개발하면서/코드보면서 2011. 9. 3. 10:37
저번시간에 DocumentWriter에 이어서 이번에는 SearchWriter, SortWriter, GroupWriter 알아보려 한다. 우선 SearchWriter에 초기화 부분은 아래와 같다. for (int i = 0; i < indexSettingList.size(); i++) { IndexSetting is = indexSettingList.get(i); String handlerName = is.handler; logger.debug("is = "+is); Object t = IRSettings.classLoader.loadObject(handlerName); if(t != null){ tokenizers[i] = (Tokenizer)t; } else { throw new IOExceptio..
-
[Fastcat] FullIndex를 알아보자. (2)개발하면서/코드보면서 2011. 8. 13. 00:03
SegmentWriter에 대해 알아보는 시간이다. SegmentWriter에는 문서 텍스트 및 포스팅 정보, 렉시콘, 필터, 정렬, 그룹에 필요한 정보를 가공하는 역할을 한다. SourceReader에서 하나의 문서를 schema.xml에서 정의한 속성대로 저장한다. 한문서를 읽을 때마다 DocumentWriter, SearchWriter, FilterWriter, SortWriter, GroupWriter의 write를 실행한다. while(!requestStop && sourceReader.hasNext()){ Document doc = sourceReader.next(); int docNo = documentWriter.write(doc); if(lastDocNo != docNo) throw ne..
-
[Fastcat] FullIndex를 알아보자. (1)개발하면서/코드보면서 2011. 8. 6. 00:40
이번에는 전체색인을 fastcat에서는 어떻게 하는지 알아보자. schema에서는 각 필드의 정보들(primary, sort, type, group등)을 schema.xml에서 읽어들이고 SourceReader는 실제 원문 파일을 읽어들이는 기능을 한다. SegmentWriter는 읽어들인 데이터를 가지고, 실제 색인작업을 수행한다. 이번 포스트에서는 Schema와 SourceReader에 대해서 알아보도록 하자. Test용으로 있는 schema.xml을 보면 맨 처음에는 collection의 이름이 나오고 그 다음에 6개의 필드 정보가 나온다. 각 필드는 name과 type은 반드시 있어야한다. (가장 기본적인 data) schema.xml을 한줄한줄 읽어가며 parsing한 data를 Schema c..
-
inter & range Command개발하면서/코드보면서 2011. 7. 21. 23:50
이번 포스트에서는 set, zset(sorted set) 자료구조에서 inter, union 어떻게 동작하는지 알아봅니다 우선 무식하게 주어진 key의 value들을 다 읽어가면서 check, check 하면서 진행할것같다...라는 생각을 가지고 소스를 보기 시작했습니다. 어? 진짜네요;;; set, zset 거의 동일합니다. set 기준 으로 설명하겠습니다. inter명령어 입니다. sinterGenericCommand( reply할 client, set 첫 포인터, set자료구조의 갯수, 결과 저장할 set) 마지막 인자는 sinterstore명령어에서 사용하겠죠? 흐름은 아래와 같습니다. (마지막이 key3이 아니라 key4;;;) set[0]을 기준으로 set[1~-setnum-1]들이 크기순으로..
-
[Fastcat]작업 관리에 대해 알아보자.개발하면서/코드보면서 2011. 7. 2. 10:52
검색 하는 부분을 보기에 앞서, 작업들을 어떻게 관리하는지 보자. init에서는 HomePath 설정하고, 객체 가져온다. 이번 Post에서는 dbHandler, JobController, JobScheduler가 어떤식으로 구동하는지 알아보자 dbHandler는 간단하다. Connection가져오는 기능, 그리고 table 생성하는 기능 JobController는? Job을 담을 저장공간, JobQueue가 있는데 JobControllerWorker가 계속 감시한다. Job이 들어오면 즉시 jobExecutor에다가 주고, jobExecutor가 Job을 실행 한다.. 그리고 JobScheduler는 DB의 IndexingSchedule 테이블에서 활성화된 예약 작업들 (isActive==1) 을 가져..