2013년 11월 25일 월요일

Solr 검색의 이해 - Term 과 Slop

진행 중인 Site 에서 Solr 용어표를 작성하다가 아예 블로그에 옮깁니다.

다음은 Solr Wiki 의 내용을 참고하여 자체적으로 작성한 각 용어에 대한 설명입니다.(Glossary)

Lucene
검색엔진 라이브러리. 실제 검색을 담당하는 로직과 모든 알고리즘이 포함되어 있음. 라이브러리는 여러 S/W 의 집합을 의미함.
Solr
Luene 을 이용한 사용자 검색 플랫폼. 웹기반으로 사용자와의 인터랙티브한 질의응답이 가능하도록 만든 UI 플랫폼.
Terms
Lucene 에서 사용하는 검색어 단위. term 에는 Single term 과 Phrases 라는 두가지 타입의 term이 존재함.

Single term 은 "hello" 나 "dolly" 와 같이 한단어로 이루어지며, Phrase 는 "hello dolly" 와 같이 인용부호로 감싸여진 여러 단어로 이루어진다.
Index색인.

문서를 검색이 가능하도록 문서내용을 Lucene 의 자료구조로 변환하여 컴퓨터에 저장하는 행위.
Operator
연산자. 대표적으로 "AND" 와 "OR" 연산자가 있음.

OR 연산자는 두 term 들을 연결하여 이 term 들중 하나라도 문서에 존재하는지 검색하며 이는 합집합 연산과 동일함.

AND 연산자는 두 term 을 모두 갖는 문서들을 검색하며 이는 교집합 연산과 동일하다. "jakarta apache" 와 "jakarta lucene" 과 같이 Phrases terms 를 포함하고 있는 문서들을 검색하려면,
"jakarta apache" AND "jakarta lucene"

두개의 terms 사이에 AND 연산자를 삽입하여 질의하면 된다.
Score
Lucene 에서는 모든 검색결과에 Score 를 계산하고, 우선순위를 지정하여 높은순으로 사용자 에게 반환함.

Score 알고리즘은 Index 알고리즘에 의존적이기 때문에 Index 알고리즘을 먼저 이해하여야 하나, 정리하자면 다음과 같이 여러 요소들이 같이 계산됨


  • Term Frequency
  • Inverse Document Frequency
  • Coordination Factor
  • Field Length
Boost
Lucene은 발견된 term 을 기반으로 문서가 일치하는 정도를 판단하는 기능을 제공함. 

term을 boosting 함으로써, 문서의 검색결과를 제어할수 있다. 사용법은 term 의 끝에 boost factor(숫자)와 함께 캐럿 기호"^"를 사용한다.

기본 Boost factor 는 "1" 임.  예를 들어 질의어를 다음과 같이
(title: "축구" OR title: "한일전")^1.5 OR (content: "축구" OR content: "한일전")

하면 content 와 title 모두 "축구" 와 "한일전" 문구가 포함된 검색결과를 리턴하지만, title 검색결과를 우선적으로 리턴함.
Proximity matchingLucene 은 terms 간의 distance 검색을 지원함.

"축구" 와 "한일전" 이라는 단어가 4개의 다른 terms 사이에 있는 문서를 검색하고자 한다면,
"축구 한일전"~4

위와 같이 와 숫자기호(slop)를 사용하여 질의를 하면 된다.
Slop
Slop 은 Lucene 에서 사용하는 검색범위의 단위라 할수 있다.

Proximity match 검색에서 "축구 한일전"~4 와 같이 검색을 하였으면 slop 은 4이며

"축구 한일전"~3  으로 검색하면 3 slop 을 준것임.
당연히 두개의 검색결과는 차이가 있다. 


위의 용어표를 보면 알겠지만, 모든 검색엔진에서는 색인(Index) 및 검색(Search)의 기준이 되는 단위가 존재하는데, Lucene 은 term 이라는것 을 기준으로 사용하는걸 알수 있습니다.

slop 관련 잘 설명되어 있는 문서는 여기를 참조하시기 바랍니다.

요약하자면, txt 파일에 다음과 같은 내용이 있을때

Here are some foods that Deron likes:
hamburger
french fries
steak
mushrooms
artichokes
"hamburger steak"~1 과 "hamburger steak"~2 으로 했을때 검색결과의 차이점을 눈여겨 보시기 바랍니다.

"hamburger steak" 질의는 "hamburger steak"~0 과 동일한 결과를 나타냅니다.

Hit: C:\projects\workspace\demo\filesToIndex\deron-foods.txt

Query: contents:"hamburger steak"
Number of hits: 0

Query: contents:"hamburger steak"~1
Number of hits: 0

Query: contents:"hamburger steak"~2
Number of hits: 1
Hit: C:\projects\workspace\demo\filesToIndex\deron-foods.txt

Query: contents:"hamburger steak"~3
Number of hits: 1
Hit: C:\projects\workspace\demo\filesToIndex\deron-foods.txt

Searching for 'french fries' using QueryParser
Type of query: BooleanQuery
Query: contents:french contents:fries
Number of hits: 1
Hit: C:\projects\workspace\demo\filesToIndex\deron-foods.txt

Searching for '"french fries"' using QueryParser
Type of query: PhraseQuery
Query: contents:"french fries"
Number of hits: 1
Hit: C:\projects\workspace\demo\filesToIndex\deron-foods.txt

Searching for '"hamburger steak"~1' using QueryParser
Type of query: PhraseQuery
Query: contents:"hamburger steak"~1
Number of hits: 0

Searching for '"hamburger steak"~2' using QueryParser
Type of query: PhraseQuery
Query: contents:"hamburger steak"~2
Number of hits: 1
Hit: C:\projects\workspace\demo\filesToIndex\deron-foods.txt

2013년 10월 23일 수요일

Gravity (Movie)



일산 IMAX 3D로 보고 왔습니다.

3D로 만들어진것 중 근래 보기 드물게 잘 만들어진 영화더군요.

마치 우주공간에 실제로 있는 듯한 "간접체험" 을 하게 해줍니다.

FPS 게임을 하는듯한 1인칭 시점변환이 곳곳에 튀어나와 View 동기화가 적절하게 이루어 집니다.

이런 종류의 게임을 하면 멀미증상이 있으신 분들은 영화를 보고 힘들수도 있을듯..

영화에 등장하는 배우는 총 3명입니다. 것도 한명은 단역이고, 조지 클루니와 산드라 블록 2사람의 배우로 처음부터 끝까지 가는 영화.

그러나, 화면에서 처음부터 끝까지 눈을 못 떼는 영화. 그만큼 비쥬얼의 끝판왕을 보여줍니다.

영화를 보고 누구나 우주에 대한 환상을 증폭시켜 주는..

Gravity 는 사전적 의미로 중력도 있지만, 엄숙함/중대성 등의 의미도 같이 내포하고 있군요.

배우들도 워낙 베테랑들이라 연기가 나무랄게 없습니다.



개인적으로 가장 인상깊었던 장면.

2013년 9월 3일 화요일

Solr Cloud over 100 million( 1억 ) docs.

내부적으로 실험적인 프로젝트로 시작한 Solr Cloud 가 여러 베타 테스트 및 스트레스 테스트를  거쳐 운영환경에 포팅한지 약 6개월 정도 지났는데요.

6개월 동안 크롤링 머신이 지속적으로 색인을 하여 현재 색인량이 1억건(100 million)을 넘어섰습니다.

아래는 운영중인 Solr 서버의 조회결과 스크린샷 입니다.



Cache 를 사용했다고 하지만, Full text search engine 에서 1억건 전체 카운트를 가져오는데 1562 millisecond(1.5 seconds) 걸리는 군요.

쓰면 쓸수록 어디까지가 Solr 의 한계인지 모르겠습니다. 시스템 자원이 허락하는 만큼 try 를 해보고 싶은것이 너무도 많네요.

아래는 4대의 서버와 2개의 Shards 로 구성한 Solr Cloud 스크린샷 입니다.


Lucene/Solr 가 현재까지의 검색 플랫폼에 커다란 획을 긋는 Architecture 인것은 확실한것 같습니다.

2013년 8월 8일 목요일

No SQL 비교, (Hbase, Cassandra, MongoDB)

평소에 Cassandra 아키텍쳐 에 매료되어 관심을 가지고 있었는데,

Cassandra 로 상용 솔루션을 출시한 DataStax 에서 아래와 같이 메일이 왔더군요.

재밌는 내용이 많아 공유합니다.

- 메일 원문 -

Hi Jinho,

DataStax is driving the Apache Cassandra database to be the first viable alternative to Oracle for companies who are transforming the way they interact with customers.
From startups to Fortune 100 Enterprises, the evidence is clear that a change is required.  Applications must now scale to levels that were unimaginable just a few years ago, but scaling alone isn't enough. Companies also require that their applications are always available and lightning fast, and that is where traditional databases fail.
Cassandras beautifully simple and elegant architecture handles these problems in ways no other database can.  Its fully distributed nature allows for amazing performance at extreme data velocities.  And for availability, we can forget about the days when simply worrying about an outage of a machine here or there was all that was needed. Cassandra delivers a world where you can lose an entire datacenter and still perform as your customers expect -- thats availability!
Netflix, Adobe, eBay to name a few, have all switched to DataStax Enterprise (DSE) and below are just some of the reasons why they arent looking back:
Faster access to data
Quicker time to market
80-90% reduced costs over RDMS
Smart bundle: Enterprise ready Cassandra, Apache Hadoop for analytics, and Apache Solr for search.
I have included a recent webinar that includes a simple guide of how to choose: How To Tell if your Business Needs NoSQL  
If your next generation applications need to run at the speed of now then we should connect soon.  When would be a good time for us or direction to someone on your team to speak briefly?


Michael Hammer
Business Development
DataStax (Powered by Apache Cassandra & Hadoop)

650-281-1906 - Mobile
650-389-6034- Office
michael.hammer99- Skype

Cassandra could wreak havoc on Oracle" - USA TODAY

특히, NoSQL 솔루션 벤치마크 결과 를 눈여겨 보시기 바랍니다.


2013년 7월 27일 토요일

파파존스의 사훈.

파파존스 쿠폰이 생겨서 동생과 병원에 다녀오는 길에 들렀습니다.

오는 길에 있는 지점을 찾다보니 목동점으로 가게 되는군요. (일방통행 난무...)

여기저기 헤맨 끝에 찾아간 파파존스 목동점.

개인적으로 피자를 좋아하는 편은 아니지만, 파파존스 피자는 맛있게 먹은 기억이 있어요.

쿠폰을 제시하고 아이템 변경이 가능하냐고 물었지만, 역시나 쿠폰은 명시되어 있는 것만 가능하다는 직원의 정중한 답변 ㅜ.ㅠ

대학생들 처럼 보였는데, 손님을 대하는 태도에서 친절함이 몸에 배어있는것 같더군요.

'이건 사내 교육의 힘인가...'

주문하고 여기저기 매장안을 구경하다 발견한 파파존스의 밸류.


파파존스 사훈

인재를 중시하는 PAPA 와 Attitude 항목이 눈에 띄는 군요.

'If you think you can or you think you can't - you're right.'

'우리가 어떤일을 할수 있다 또는 할수 없다라고 판단을 내릴 때 그것은 옳은 것이다. 우리는 우리의 일과 능력에 대한 믿음을 가진다'

할수없다 라고 판단을 내린다고....?

그게 쉬운일인가...?

피자를 들고 집에 오는 내내 무언가 찜찜한 기분이 계속 들어서 왜그런지 가만히 생각을 해보니...

제 경험상 우리는 어떤 업무를 맡았을때 '할수없다' 라고 말하는 것에 대하여 근본적인 두려움이 있는것 같습니다.

특히나 제가 속해있는 분야인 S/W 업계에서는 Client 가 의뢰하는 개발기간이 터무니 없더라도 Can't 라는 말을 잘 하지 못합니다.

그나마 Client 가 내부 조직이면 자신있게 'No' 라고 얘기하는 모습은 심심찮게 봐왔지만, 외부 고객일 경우 상황은 완전히 바뀌게 되죠.

직장내 다른 사업부나 팀에게 특정 업무를 의뢰하거나 공동개발 할 일이 생겼을때, 협업하여 업무를 처리하게 되어있잖아요.

그런데 의뢰한 팀에서 '이건 말도 안되는 기간이에요. 이 기간안에는 못해요'

라는 답변이 오거나 혹은, 

'제품 아이디어는 좋지만 채산성이 없군요. 투자비용이 현재 설정가지고는 안돼요'

라는 답변이 왔을때, 어떤 생각이 드시나요?

'저거. 내가 하면 할수 있을텐데' 혹은 '저놈들은 항상 저래. 인생에 도움이 안되는군.'

라고 생각이 들지 않나요?

부끄럽지만 저도 저런 생각 많이 합니다 :)

의뢰를 받은 당사자가 이건 할수 없다는 답변을 하였을때 서로간에 신뢰도가 얼마나 되어야 

'아...내가 무리한 요청을 하였구나'

라고 생각할수 있을까요..

서로간에 100%는 아니더라도 80% 이상 신뢰할수 있는 그런 끈끈한 조직에서 한번이라도 좋으니 일을 해보고 싶군요.

그런 조직에서 근무할 날이 오긴 올까요..

파파존스의 핵심가치(Core values) 가 많은것들을 생각나게 합니다 :)

2013년 7월 22일 월요일

덥긴 더운가 보네요.


소파위에 널부러져 있는 꼬모군


집어치라 마..

2013년 6월 20일 목요일

한우 살치살 기가 막힌 곳.


광진구 자양동에 위치한 와!우


지인의 추천으로 골목길을 돌고 돌아 따라간 한우 요리 전문점. 

들어가자 마자 

"이모! 저왔어요"

하는 지인과

"왔노. 어여 앉아라. 시원하게 해줄끼마"

화답 하시는 사장님. 

대화로 봤을때 1~2년 단골사이가 아닌 냄새가 벌써부터 주욱..

자리잡고 기다리는 동안 쇠고기 미역국이 나왔는데 배고파서 그런지 이또한 별미더군요.

게눈 감추듯, 마셔(?) 버리고 한그릇 더 부탁.. ^^

미역국에 먼저 주문한 소맥을 마시고 있을때, 사장님 특별 추천 살치살 도착.



직접 담근 김치와 함께 나온 살치살

직접 입에 넣어보니, 사르르 녹는것이....

이정도의 식감은 예전 아버지 따라간 전남 도축장 앞에서 갓잡은 한우를 먹었을때 그 맛이 떠오르네요.

서울에서 먹기 힘든 한우 맛인듯.

물론 시간날때마다 가족관계(?)임을 공공연히 공포한 단골손님인 지인과  사장님 사이니까 저런 고품질의 고기가 나왔을 수도..(개인적 생각)




육회 한사발 (이것도 입에서 사르르)


몇가지 아쉬운 점은 가게 찾아가기가 쉽지 않은듯. 다음맵 에서 전화번호로 검색하시면 로드뷰 까지 볼수 있습니다.

그리고 가게가 크지 않아 많은 손님을 데리고 가기 어렵다는것.

테이블 3~4 개 입니다. 

여름엔 카페테리아 처럼 테이블과 의자 밖에 두고 먹을수도 있을듯 합니다.

가격은 한우전문점인 만큼 저렴한 편은 아니랍니다 :)  참고하시길


2013년 4월 13일 토요일

Camel boy: 최고의 족발집을 찾아서

Camel boy: 최고의 족발집을 찾아서

최고의 족발집을 찾아서

무슨 글제목이 맛집 프로그램 리포터 같은....


암튼, 여태 맛보았던 족발중 Top 을 차지하고 있었던 양재역 할머니 족발집 (since 1970)보다 퀄리티 면에서 훨씬 낫다는 제보아래,


세미나 끝나고 선릉으로 단체 회식을 갔는데.


골목골목 찾아들어가 간신히 도착.


점심을 좀 일찍 먹은편이라 허기 진 상태..


다짜고짜 자리잡고 앉으려는 순간,


번호표를 뽑고 대기하라는 이모님의 말씀.


'족발집에 번호표 시스템이 ???'


받은 번호는 35번.


현재 번호는 19번.


허기져서 도저히 안될것 같아 다른곳으로 가자고 우겼으나 기왕 여기까지 왔으니 맛을 봐야 한다는 직장 동료들. 


할수없이 다수결로 정하기로 하여 vote.


.....


무려 1시간을 기다려 자리에 앉게 되었는데,



여기 사진과 영상 투척합니다.



IMG_0394.JPG




맛은 1시간 기다릴만 합니다. :) 후회 안해요~

2013년 4월 6일 토요일

쭈꾸미 철입니다!!!!!

네. 지금이 바로 쭈꾸미 철입니다. 오랜만에 찾아가는 사당, 생물 쭈꾸미집.



이걸 보세요!!!

알이 꽉차 있어 금방이라도 나 잡아잡수 하고 일어날 듯한 느낌 :) 연포탕은 국내에서도 수준급 인듯.