Egloos | Log-in
결론에 가보기
결론에 가보기
검색이야기 with Lucene, solr


나는 개발자이기는 하지만 검색관련은 아니었다.

검색에 대해서 할수 있는 것이라고는
그냥 눈으로 찾던지, DB 필드들의 like 검색을 하는것,
일에 관한것은 구글을 이용, 가십거리는 네이버를 이용하고
내 컴퓨터에서 찾을때는 구글 데스크탑을 이용하는 정도..

두어달전부터 회사 서비스에 적용할수 있는 검색서비스에 관한 일을 하고 있다.
나처럼 이런 문외한도, 검색서비스를 1~2명이서 개발할수 있도록 도와주는 것이
저 lucene(루씬), solr(솔라) 라는 놈들의 덕분이다.

lucene(루씬)은 자카르타 프로젝트의 탑 시드를 받고 있는 오픈소스이다.
solr(솔라)는 루씬을 기본으로 한번 더 포장한 오픈소스이다.

요즘같이 엄청나게 폭발스러운 데이터에서 필요한 정보를 찾기 위한 검색은
포탈싸이트 같은곳에서는 필수품이 되었고 네이버에서 검색으로 얼마나 많은
돈을 버는지는 말을 하지 않아도 쉽게 알수가 있다.

네이버나 구글에서의 검색프로세스를 살펴보면(그냥 ^^ 간략히)
1. 데이터를 수집한다 (50%)
2. 데이터를 색인(인덱싱) 한다 (40%)
3. 데이터를 검색한다 (10%)
정도이다.

루씬은 검색과 색인의 API를 제공해주는 core 엔진이다.
아주 괜찮은 구조로 되어 있어서 현재 1억건 정도를 색인하고 검색을 하는데
느리다는 느낌을 받지 않는다.

하지만 루씬을 쓴다고 개발자의 할일이 없는 것은 아니다.
루씬은 엔진일뿐 http 나 socket이나 file에서 데이터를 읽어서 색인하라!! 라고 전달해주는 부분과
http나 socket으로 요청을 받아서 검색후 결과를 전달해주는 부분은 만들어야 한다.

여기서!!! 솔라가 또 한몫을 해준다
솔라는 색인과 검색을 루씬엔진을 쓰면서 http 프로토콜을 이용해서
색인 요청을 받고, 검색요청을 받고 결과를 주는 ,
어떤 정보를 어떤 방식으로 색인하고, 어떤 필드들을 저장하고 있는지에 대한 관리툴까지!!!
모두 제공해주는 역할을 해준다.

이런 멋진 엔진과 툴 덕분에 나 같은 놈도 ^^ 검색이라는 서비스까지 만들수 있는 것이다.
이 시점에서 박수!!!! 짝짝짝짝짝짝


루씬과 솔라를 이용하더라도 어쩔수 없는 부분이 있다.
그것은 역시!!! 2바이트 문자인 한글이다. 단순 2바이트 이외에도 한글의 특성상
색인부분을 뽑아내는것이 그리 녹녹하진 않다.
예를 들어보자

"우리 아버지는 대한민국을 사랑하십니다"

영어에서 색인단어를 추출하는 analyzer중 기본인 WhitespaceAnalyzer(빈공간으로 나누기)
로 자르면 [우리] [아버지는] [대한민국을] [사랑하십니다] 로 나온다.
우리빼고는 검색이 안된다.

stopword라는 불용어(색인 대상에서 제외시키는것)에 조사와 십니다, 습니다
와 같은 단어를 모두 포함시키면
[우리][아버지][대한민국][사랑하] 까지는 나오지만
사랑, 대한 같은 키워드로 검색이 안된다.

이런 단어들을 좀더 세분화해서
[우리][아버지][아빠][아부지][대한][대한민][대한민국][한국][사랑][러브] 까지 등록해서
검색할수 있도록 analyzer를 만드는 것은 우리나라 개발자들의 몫이다.
영어를 기본으로 하는 나라에서 만들어진 오픈소스의 한계라고나 할까..
그래도 analyzer를 따로 만들어서 색인시 이용할수 있다는 것이 어디야~

색인의 디테일한 정도와 색인시간은 반비례가 될수밖에 없다.
한국어 사전에 등록되어 있는 단어들로만 등록 가능하게도 할수 있다.
하지만 1억건에 데이터에 대해서 1개의 데이터별로 5~6번씩 사전을 검색해서 가능여부를 판별하는건
그만큼의 시간이 걸린다는 것을 나타낼수밖에 없다.

정확도, 색인시간, 색인용량, 검색시간... 등등
해당 서비스별로 맞춰서 하는것이 정답이다.
그래도 ^^ 루씬과 솔라를 쓰면 요고(에게~ 요고 ^^)만
고민하면 되니깐 이게 어디겠냐 ^^
by 제우스 | 2007/08/17 12:13 | 컴퓨터 | 트랙백 | 핑백(2) | 덧글(9)
트랙백 주소 : http://zeous.egloos.com/tb/1412280
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at 결론에 가보기 : 검색이야기 .. at 2008/01/28 14:57

... 작년 검색일을 시작하면서 첫번째 이야기를 쓴것 같은데 벌써 5개월정도가 흘렀네.. 와~ 시간 빠르네.. 그때는 시작하면서 필요한 시작에 대해서 얘기를 하였었는데 이제 실제 적용도 해보고 나름 안정성을 위한 노력도 ... more

Linked at 결론에 가보기 : 검색이야기 .. at 2008/03/27 16:22

... 서 성능 테스트, 장비테스트, prototype의 적용에서 지금의 본격적인 서비스 적용까지.. 벌써.. 이만큼이나 왔다. 개략적인 solr에 대한 이야기로 검색이야기 with Lucene, solr 를 포스팅하였고 prototype의 적용으로 알게된 내용으로 검색이야기 with Solr - #2 활용 를 포스팅하였다. 새 장비를 가져와서.. 기존의 JDK ... more

Commented by 호석스 at 2007/08/17 15:14
그래서 상용 검색엔진의 경우, 한글검색은 '형태소 분석'을 하더라.

사랑하십니다= [사랑]+[하]+[시]+[ㅂ니다]

요렇게 된 형태소 분석기를 외국 검색엔진 업체에 파는 모 대학 연구실이 있던데... 잘은 모르지만 아마 돈 좀 될꺼다.

재미난거 하는 구나. 요즘 웹수집/검색에 흥미있는 아이템이 많던데...

Commented by 제우스 at 2007/08/17 17:18
^^ 맞아.. 형태소분석이징..
글을 쉽게.. 기술적인 부분 다 빼고 쓴다고 용어를 안썼는데
호석인 잘 알아듣네 ㅋㅋㅋ
형태소분석으로 몇개의 알고리즘이 있는데 지금 되어있는 부분에서
좀더 손보는 작업을 한다.. ^^
Commented by 이혜선 at 2008/08/22 14:30
특정의 몇몇 사이트 리스트를 가지고 그 안에서의 검색을 구현하는것도 lucene + solr를 이용해서 할 수 있나요?
만약 하려면 어떤식으로 구성을 해야되는지 좀 알려주세요..ㅠㅠ
Commented by 제우스 at 2008/08/25 11:13
그 몇몇의 사이트가 데이터를 어떻게 주는지가 관건이겠네요.. 몇몇 사이트는 검색엔진과 전혀 상관없이 그대로 동작을 하고
검색엔진이 자동으로 데이터를 수집해야 한다면.. lucene + solr로는 일이 많아집니다. 자동으로 데이터를 수집하는
프로그램을 만들어야 하니깐요.. (데이터를 수집하는 부분 50% ^^.). 대상 리스트가 있어서 범위는 줄어들지만
lucene, solr와 전혀 상관이 없는 자료를 수집하는 프로그램은 만들어야 하겠네요

몇몇 사이트에서 글이 생성이 될때 검색엔진으로 자료를 받을수가 있다면 일은 아주 쉬워집니다.
이것은 solr의 기본구성으로도 충분히 해결이 되겠네요
Commented by 이혜선 at 2008/08/27 12:00
만들려고 하는 서비스는 관련사이트 검색입니다.
그리고 몇몇의 사이트라 함음 별개로 돌아가는 전혀 다른 사이트입니다. 뭐 물론 아무런 협의같은 것도 없는 상태구요.
제가 만들었던건 HtmlParser로 일단 사이트의 link들을 전부 수집한 후에
해당 링크의 소스중에 텍스트만 긁어와서 DB에 넣고 like 검색을 하는 수준입니다.
제가 만들면서도 이건아닌데... 란 생각이 계속 들고.. 요즘 루씬을 공부하면서 루씬으로 바꾸면 참 좋겠다는 생각이 들어서
여기저기 정보를 찾는다고 돌아다니고 있는중입니다.
너치라는것도 있는거 같던데.. 뭐 아직 얄팍한 지식인지라.. 제대로 감이 잡히지 않는 상태라서요..
뭐.. 좀 좋은방법이 없을까요? HtmlParser라이브러리로 파싱을 하는데 웬지 맘에 들지 않는것같기도 하고해서 조언 부탁드립니다..
그럼 즐거운 하루 보내세요~~^^
Commented by 제우스 at 2008/08/27 14:01
Nutch는 루씬에 데이터를 수집하는 앞단 엔진까지 만들어진 엔진이네요.(저도 써보진 않았어요 ^^). 혜선님에게 맞을것 같기도 하고
이미 html을 가져와서 DB에 넣는 프로그램이 있다면 solr로 전환하는건 아주 쉬워요.. DB가 아닌 검색엔진으로 보내면 되니깐요.
루씬이냐 solr냐를 고민한다면 색인된 자료를 검색해서 뿌려주는곳이 웹이라면 solr를 추천합니다.
HtmlParser는 HPRicot을 써본적이 있는데 아주 멋진놈이었습니다. 이보다 더 간단할수 없다 ^^ 라고 느낄정도로

도움이 되셨나요?
Commented by 이혜선 at 2008/08/27 15:13
일단 solr를 좀 테스트 해보고 nutch를 살펴봐야겠군요.
그래도 제우스님 덕분에 대충 방향을 잡았네요. ^^
만든 검색엔진이 시간이 없어서 로봇형태로 만들진 못하고,
그냥 간단한 멀티쓰레드 방식으로 급조해서 만들다보니...
데드락걸리는 경우도 많이 발생하고 또 급조하니 코드에도 맘이 안가고 있는터라..
얼렁 들어내야겠네요..
그럼 즐거운 하루 보내세요~~~ ^^
Commented by Xellos at 2012/10/26 10:28
정보를 찾다가 여기까지 흘러들어 왔네요.
안녕하세요.
검색엔진이나, 혹시 루신이나 솔에 관련 업체를 찾는데,
오픈소스의 형식이다가 보니까 기업은 이런곳보다 쉽지않아서,
정보를 찾는데 애를 먹고 있습니다.
혹시 아시는 분은 답변 부탁드립니다.
Commented by awesome at 2013/05/23 20:21
좋은 포슷팅 고맙습니당

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶

카테고리
영화나 책
말말말
컴퓨터
게임이야기
태그
원리 라이프사이클 개발자 나꼽살 메이저코드 2nd밴드 스테가노그래피 기타코드 재태크 ror 게임 제이슨프라이드 웹개발자 helloworld 보험 화성학 개발 디아블로3 ngrinder 오픈세미나 슬럼프 직업 마이너코드 똑바로일하라 공연 하이코드 vanish 서버개발 파워코드
전체보기
최근 등록된 덧글
엄지척 바짝 올립니다. 궁금했던..
by 초보 at 10/11
다자가이든 소작이든 닭이 천 마리..
by yada at 09/20
나는 팔라독 헬 깸.
by 남영찬 at 06/17
^안녕.하세요^;; 골드팟 생기개..
by 전설의레전드소설책 at 03/25
이왕이면---- A7 등등 '7' 이 붙는..
by papagoat at 04/12
매우 감사합니다 ! 아주 쉽게 키..
by papagoat at 04/12
자꾸 F를 라로 표기하시네요 ㅎㅎ
by 안녕하세요 at 12/21
시 클라식 기타 코드표 도 보여..
by 강초보 at 06/08
sp를 싫어하는 개발자들은 유지..
by 나도개발자 at 04/23
여자친구와의 금연약속을 어겨서..
by 구사일생 at 11/13
라이프로그
똑바로 일하라
똑바로 일하라

펜트하우스 코끼리
펜트하우스 코끼리

화폐전쟁
화폐전쟁

10억
10억

거북이 달린다
거북이 달린다

용의자 X의 헌신
용의자 X의 헌신

마더
마더

터미네이터 : 미래전쟁의 시작
터미네이터 : 미래전쟁의 시작

스타트렉 더 비기닝
스타트렉 더 비기닝

천사와 악마
천사와 악마

노잉
노잉

7급 공무원
7급 공무원

박쥐
박쥐

인사동 스캔들
인사동 스캔들

와이키키 브라더스
와이키키 브라더스

매란방
매란방

건투를 빈다
건투를 빈다

코끼리는 생각하지 마
코끼리는 생각하지 마

배려
배려

벤자민 버튼의 시간은 거꾸로 간다
벤자민 버튼의 시간은 거꾸로 간다

작전
작전

워낭소리
워낭소리

작전명 발키리
작전명 발키리

적벽대전 2 : 최후의 결전
적벽대전 2 : 최후의 결전

트랜스포터 - 라스트미션
트랜스포터 - 라스트미션

디파이언스
디파이언스

사랑하지 않으면 떠나라!
사랑하지 않으면 떠나라!

촐라체
촐라체

쌍화점
쌍화점

황후화
황후화

크리스마스 별장
크리스마스 별장

눈먼 자들의 도시
눈먼 자들의 도시

예스맨
예스맨

순정만화
순정만화

펀치 레이디
펀치 레이디

눈에는 눈 이에는 이
눈에는 눈 이에는 이

전략적 책읽기
전략적 책읽기

돈, 뜨겁게 사랑하고 차갑게 다루어라
돈, 뜨겁게 사랑하고 차갑게 다루어라

좋은 놈, 나쁜 놈, 이상한 놈
좋은 놈, 나쁜 놈, 이상한 놈

다크 나이트
다크 나이트

H2 1
H2 1

그림으로 읽는 생생 심리학
그림으로 읽는 생생 심리학

호모 코레아니쿠스
호모 코레아니쿠스

강철중: 공공의 적 1-1
강철중: 공공의 적 1-1

이채원의 가치투자
이채원의 가치투자

쿵푸 팬더
쿵푸 팬더

카불의 사진사
카불의 사진사

인디아나 존스 4 - 크리스탈 해골의 왕국
인디아나 존스 4 - 크리스탈 해골의 왕국

시골의사의 부자경제학
시골의사의 부자경제학

종자돈 700만 원으로 부동산 투자 200억 만들기
종자돈 700만 원으로 부동산 투자 200억 만들기

우리동네
우리동네

디지로그 digilog
디지로그 digilog

대하소설 주역 4
대하소설 주역 4

읽지 않은 책에 대해 말하는 법
읽지 않은 책에 대해 말하는 법

Stick 스틱!
Stick 스틱!

색즉시공 시즌 2
색즉시공 시즌 2

바르게 살자
바르게 살자

20대는 통장을, 40대는 인생을 채워라
20대는 통장을, 40대는 인생을 채워라

점퍼
점퍼

생로병사의 비밀
생로병사의 비밀

추격자
추격자

오늘의 거짓말
오늘의 거짓말

주식시장을 이기는 작은책
주식시장을 이기는 작은책

대한민국 진화론
대한민국 진화론

무방비 도시
무방비 도시

피라니아 이야기
피라니아 이야기

우아한 세계
우아한 세계

경제를 읽는 기술
경제를 읽는 기술

실용주의 프로그래머
실용주의 프로그래머

블로그 비즈니스
블로그 비즈니스

어거스트 러쉬
어거스트 러쉬

세븐데이즈
세븐데이즈

뷰티풀 선데이
뷰티풀 선데이

괴물 1
괴물 1

킹덤
킹덤

당신과 일하기 힘들어 죽겠어
당신과 일하기 힘들어 죽겠어

뉴욕의 프로그래머
뉴욕의 프로그래머

나를 바꾸는 데는 단 하루도 걸리지 않는다
나를 바꾸는 데는 단 하루도 걸리지 않는다

벽오 금학도
벽오 금학도

해바라기
해바라기

펀드투자가 미래의 부를 결정한다
펀드투자가 미래의 부를 결정한다

상식이 통하는 웹사이트가 성공한다
상식이 통하는 웹사이트가 성공한다

아버지의 가계부
아버지의 가계부

본 얼티메이텀
본 얼티메이텀

최강 로맨스
최강 로맨스

여자도 여자를 모른다
여자도 여자를 모른다

부동산 10년 대폭락 시나리오
부동산 10년 대폭락 시나리오

아키텍트 이야기
아키텍트 이야기

보물지도
보물지도

오션스 13
오션스 13

게임회사 이야기
게임회사 이야기

바람피기 좋은 날
바람피기 좋은 날

조폭 마누라 3
조폭 마누라 3

삼미 슈퍼스타즈의 마지막 팬클럽
삼미 슈퍼스타즈의 마지막 팬클럽

광기와 우연의 역사
광기와 우연의 역사

런어웨이
런어웨이

회사가 당신에게 알려주지 않는 50가지 비밀
회사가 당신에게 알려주지 않는 50가지 비밀

롱테일 법칙
롱테일 법칙

해리 포터와 불사조 기사단
해리 포터와 불사조 기사단

사소한 것에 목숨 걸지 마라 - 습관 바꾸기 편
사소한 것에 목숨 걸지 마라 - 습관 바꾸기 편

우리가 미처 알지 못한 소프트웨어 공학의 사실과 오해
우리가 미처 알지 못한 소프트웨어 공학의 사실과 오해

트랜스포머
트랜스포머

20대부터 시작하는 스트레스 제로기술
20대부터 시작하는 스트레스 제로기술

미운오리새끼의 출근
미운오리새끼의 출근

캐리비안의 해적 : 세상의 끝에서
캐리비안의 해적 : 세상의 끝에서

미녀는 괴로워
미녀는 괴로워

유태우 교수의 내몸개혁 6개월 프로젝트
유태우 교수의 내몸개혁 6개월 프로젝트

브레이크 업 : 이별후애(愛)
브레이크 업 : 이별후애(愛)

인사이드 맨
인사이드 맨

마키아벨리, 회사에 가다
마키아벨리, 회사에 가다

웹 2.0 경제학
웹 2.0 경제학

한반도
한반도

연애, 그 참을 수 없는...
연애, 그 참을 수 없는...

구미호 가족
구미호 가족

럭키 넘버 슬레븐
럭키 넘버 슬레븐

찰리와 초콜릿 공장
찰리와 초콜릿 공장

아파트
아파트

레전드 오브 조로
레전드 오브 조로

rss

skin by jiinny
X