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 는 사전적 의미로 중력도 있지만, 엄숙함/중대성 등의 의미도 같이 내포하고 있군요.

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



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