[Fastcat] 4부. 검색을 위한 컬렉션 설정

2016. 1. 14. 14:53 IT 및 개발

안녕하세요.

Fastcat 4번째 시간이네요.

이번 시간은 검색엔진을 사용하기 위한 컬렉션을 설정해보도록 하겠습니다.

물론 아주 기초적인 내용만 들어가게 됩니다. 저도 아직 파악중이기 때문에^^



1. 시작


컬렉션 생성 위자드는 번거운 컬렉션 생성과정을 Step별로 따라오면서 쉽게 생성할 수 있도록 도움을 주는 도구입니다.

상단의 Manager 메뉴을 누르면 화면에 Create Collection Wizard 항목을 볼 수 있습니다. 클릭하면 위자드가 시작됩니다.




2. 컬렉션 기본정보 입력


 Collection ID

 컬렉션 아이디 (영문 숫자 조합)

 Collection Name

 컬렉션명 (사람이 이해하기 쉬운 문자열)

 Index Node

 색인노드 선택

 Search Node List

 검색노드 아이디. 컴마구분으로 여러개 추가가능. 우측 Drop-Down 리스트에서 노드를 선택하면 자동입력된다.

 Data Node List

 데이터노드 아이디. 컴마구분으로 여러개 추가가능. 우측 Drop-Down 리스트에서 노드를 선택하면 자동입력된다.



3-1. 데이터 맵핑 > JDBC 설정


데이터 매핍 화면에서 Source Type을 DBMS로 설정 합니다.

JDBC 에서 기존 소스가 없는 경우에는 [Create New..] 버튼을 클릭합니다.



 Id

 생성할 JDBC 설정값의 아이디 (영문 숫자 조합)

 Name

 생성할 JDBC 설정의 이름 (사람이 이해하기 쉬운 문자열)

 DB Vendor

 DBMS 제공사

 3부에서 추가한 Microsoft SQL을 선택합니다.

 JDBC Driver

 JDBC class 명. DB Vendor 선택시 자동으로 입력된다.

 Host

 DB서버 IP주소

 Port

 DB서버 서비스 PORT

 DB Name

 데이터가 존재하는 DB의 이름

 User

 DB사용자 아이디

 Password

 DB사용자 암호

 JDBC Parameter

 추가적인 JDBC 파라미터. 아래에서 자동으로 생성되는 JDBC URL에 추가적으로 이어 붙는다. 비워놓을 경우 사용되지 않는다.

 JDBC URL 자동으로 생성되는 JDBC URL.


모든 정보를 입력 후 [Test Connection] 버튼을 클릭하면 오른쪽 상단에 초록색 박스로 [JDBC connection test success]라고 뜹니다.

접속을 성공하면 [Create] 버튼을 클릭합니다.



3-2. 데이터 맵핑 > 데이터 입력


JDBC를 신규로 생성했으면 F5 키를 눌러 새로고침을 해줍니다. 그래야 JDBC 셀렉트박스에 신규로 생성한 소스을 선택할 수 있습니다. (버그인가??)



 Source Type

 소스타입. 데이터가 DB에 존재하는 경우 DBMS를 선택한다.

 JDBC

 접속할 DB에 대한 JDBC 설정. 아직 JDBC설정값이 없는 경우 Create New.. 를 클릭하여 새로 생성한다.

 Bulk Size

 Reader가 DB에서 한번씩 데이터를 가져오는 갯수. Bulk Size만큼 메모리에 쌓아두기 때문에, 값이 아주 큰 경우 OutOfMemory 에러가 발생할 수 있으니, 100정도의 디폴트값을 이용하는 것을 추천한다.

 Fetch Size

 JDBC의 Statement fetch-size를 가리킨다. 값이 0이면 각 JDBC별 디폴트값이 사용되고, -1이면, read-only cursor로 동작한다. JDBC수집중 OutOfMemory가 발생한다면 -1을 사용한다.

 저는 0 값을 사용했습니다. MS-SQL에서는 -1이 사용이 안되는건지 제대로 동작을 하지 않네요.

 Data SQL

 색인할 데이터를 가져오는 SQL 쿼리문.

 Delete SQL

 삭제할 아이디를 가져오는 SQL 쿼리문. 여기에 Select되는 필드는 컬렉션 스키마의 주키가 되어야 한다.

 [Delete SQL의 Select할 필드에는 오직 하나의 주키 필드만 가져오도록 한다.]

 Before SQL

 Data SQL이 데이터를 수집하기 전에 실행되는 SQL쿼리문.

 [Before SQL은 오직 Update SQL만 실행할 수 있다. Select 문의 사용할 수 없다.]

 After SQL

 Data SQL이 데이터를 수집한 뒤 마지막으로 실행되는 SQL쿼리문.

 [After SQL은 오직 Update SQL만 실행할 수 있다. Select 문의 사용할 수 없다.]



4. 스키마 설정


이전 단계에서 입력한 Data SQL문을 기반으로 컬렉션 스키마를 자동구성하여 추천해줍니다.


 ID

 필드아이디 (영문 숫자 조합)

 Name

 필드명 (사람이 이해하기 쉬운 문자열)

 Type

 타입명

 설명

 ASTRING

 영문자 데이터

 STRING

 영문포함 2바이트문자 데이터

 DATETIME

 날짜형

 INT

 INT형 정수

 LONG

 LONG형 정수

 FLOAT

 FLOAT형 실수

 DOUBLE

 DOUBLE형 실수

 Length

 문자형 필드의 경우 문자열길이. 입력시 고정필드로 설정된다.

 Remove Tags

 HTML태그를 자동제거 여부

 Multi Value

 다중값 필드여부

 Multi Value Delimiter

 다중값으로 변환시 사용할 구분자


하단의 [Test Field Mapping..] 버튼을 클릭하여 필드맵핑 테스트를 진행합니다.

여기서 정상적으로 데이터가 나와야 합니다. 데이터가 나오지 않는다면 이전페이지로 이동하여 설정을 다시 하시기 바랍니다.




5. 설정 확인


컬렉션 정보, 데이터맵핑 정보, 스키마필드 정보를 확인합니다.

확인이 완료되면 [Everything is OK, Create Collection] 버튼을 클릭합니다.




6. 컬렉션 생성 완료


컬렉션이 생성되었고, 색인작업과 데이터조회는 가능한 상태가 되었습니다.

하지만 검색에 필요한 색인필드설정등은 아직 수행하지 않았으므로, Continue to setting index field를 클릭하여 추가적인 설정으로 넘어가도록 합니다.




7. 컬렉션 워크 스키마 설정


실제적인 검색을 위해서는 워크 스키마를 설정해야 합니다.

아래와 같이 설정 후 오른쪽 상단의 [Save] 버튼을 클릭합니다.



6-1. Primary Keys

 - 주키는 여러개 추가시 복합키로 동작합니다.

 Field

 주키로 이용할 필드아이디


6-2. Analyzers

 - 컬렉션 내부에서 사용할 분석기를 설정합니다.

 ID

 내부 분석기 별명 아이디. Search Indexes 항목에서 이 ID를 사용한다.

 Core Pool Size 초기 분석기 POOL에 미리 만들어 놓을 분석기 객체 갯수
 Maximum Pool Size 분석기 POOL에 유지할 최대 분석기 객체 갯수
 Analyzer 분석기명. 분석기 Plugin에 설정된 이름을 사용한다. 이름포맷 = Analysis ID . Analyzer ID


6-3. Search Indexes (검색색인)

 - 검색할 필드를 설정합니다.

 ID

 필드아이디(영문 숫자 조합)

 Name 필드명 (사람이 이해하기 쉬운 문자열)
 Field

 검색할 필드. 위의 Fields 에서 설정해놓은 필드아이디 입력. 여러필드입력시 결합필드 검색가능하다.
 - 여러 필드 입력시 한줄에 하나씩 필드아이디를 입력한다.

 Index Analyzer

 색인시점에 사용할 분석기. 위의 Analyzers에서 설정한 분석기 아이디를 사용한다. 여러필드입력시 분석기도 여러개 입력한다.
 - 색인분석기의 갯수는 Field에서 입력한 필드갯수와 동일해야 한다.
 - 여러개의 분석기 입력시 한줄에 하나씩 분석기아이디를 입력한다.

 Query Analyzer 검색시점에 사용할 분석기. 위의 Analyzers에서 설정한 분석기 아이디를 사용한다.
 - 쿼리분석기는 색인분석기와 달리 오직하나만 입력 가능하다.
 Ignore Case 대소문자 구분 검색 여부
 Store Position 색인시 단어의 위치를 저장할지 여부. 위치 저장시 인접검색이 가능하다.
 Position Increment Gap 색인단어의 위치를 저장하여 결합 검색필드를 만들때, 각 필드간 위치차이를 설정한다. 서로다른 필드간 단어가 인접하지 않도록 조정해야 할 때 사용한다.



8. 인덱싱 해보기


아래 이미지와 같이 COLLECTIONS > course > Index > Build 로 이동후 [Run Full Indexing] 버튼을 클릭하여 수동으로 풀 인덱싱을 시작합니다.



인덱싱이 완료되면 COLLECTIONS > course > Data 로 이동하면 DB에 있던 데이터를 가져온걸 확인할 수 있습니다.

그리고 상단의 [Dashboard] 메뉴를 클릭하여 확인해보시기 바랍니다.



* 참고사항


예제에서 사용한 인덱싱용 분석도구는 기본으로 제공되는 BASIC 분석도구입니다. 

제가 테스트한 결과로는 BASIC 분석도구로는 한글에 대해서 제대로 분석이 되지 않습니다.

예를 들어 [사과의 가격은 얼마입니까?]를 BASIC.STANDARD 분석기로 테스트 한 결과 [사과의, 가격의, 얼마입니까] 이런식으로 분석을 해버립니다.

그래서 [사과]라는 단어로 검색을 하면 검색이 되지 않습니다. [사과의]로 검색을 해야 된다는 것입니다.


저도 써보지는 않았지만 패스트캣에서 상용라이선스를 구입하면 [한국어 분석기] 플러그인을 제공한다고 합니다.

이 분석기를 사용하여 [사과의 가격은 얼마입니까?]를 분석하면 [사과, 가격, 얼마] 이런식으로 분석이 가능한걸로 알고있습니다.

저도 사용해본적이 없어 정확한 결과는 모르겠습니다만....


BASIC 분석도구중에 BASIC.AUTOCOMPLETE 분석기가 있습니다. 이 분석기는 BASIC.STANDARD에서 분석된 단어들을 한단계 더 풀어서 분석을 해버립니다.

예를 들어 [사과의]를 분석하게 되면 [ㅅ, 사, 사ㄱ, 사과, 사과ㅇ, 사과의, ㅅ, ㅅㄱ, ㅅㄱㅇ] 이런식으로 분석이 됩니다.

단어의 부분검색 및 초성검색도 가능하겠네요. 그런데 정확히는 모르겠지만 이렇게 분석을 하게되면 하드 용량을 더 잡아먹을거 같다는 느낌이 듭니다.

그리고 AUTOCOMPLETE 분석기는 데이터의 양이 많을 경우 인덱싱 중 오류가 발생할 수 있으니 키워드 형식의 데이터에서만 사용하기를 권장합니다.

예를 들어 전화번호에서 이름이나 회사명으로 검색, 주소 검색 등 간단한 데이터에서 사용을 하면 될거 같습니다.


지금까지 Fastcat의 간단한 사용기 였습니다. 감사합니다^^