오늘은 Cloudant의 핵심인, 그리고 제가 그토록 알고 싶은 like 검색 방법에 대한 고민을 해 보려고 합니다. 그리고 만족 스럽진 않지만 반쪽짜리 검색을 찾았습니다.
일단 복사한 animaldb의 구성을 잠시 살펴 보도록 하겠습니다. 오해의 소지가 발생할 수도 있을 것 같고, 저의 무식함이 드러나겠지만, 그래도 이해하는 선에서 열심히 떠들어 보겠습니다.
animaldb 구성
animaldb
All Documents : 데이터인 도큐먼트 외에도 Indexes, Views 등 사용자가 등록한 모든 정보를 보여 주는 것으로 보입니다.
Query : 쿼리 실행을 테스트할 수 있는 페이지입니다. 처음 기웃거릴때는 저녀석을 활용하려고 무척 노력을 했는데... 결과적으로 이제 저에게는 별로 의미 없는 페이지였습니다.
Permissions : API 접근 사용자 권한을 설정하는 페이지입니다. 현재 어드민 계정과 "Everybody Else" 두 계정에 대한 권한 설정이 나옵니다. 어차피 제 계정으로 앱을 설정할 거니, 디폴트 유지~!
Changes : 수정된 로그를 남기는 것 같은데... 무지하지만 시간상 해당 내용에 아직 확인할 기회는 없었습니다.
Design Documents : 오늘 확인할 녀석입니다. 기존 자료에는 Secondary Index와 Search Indexes 얘기를 하는데, 중간에 Views 가 하나 더 있습니다. 이녀석들을 어떻게 이해하는 것이 관건으로 보입니다. 다만 제가 짧은 시간 이래 저리 부딪히면서 유추하게된? 내용을 정리해 보겠습니다.
Secondary Index와 Search Indexes
문서 상의 내용은, 검색을 강화하기 위해서 추가해야할 필수적인 요소라고 합니다. 제가 이해한 RDBMS와 비슷한 것은 말 그대로 index 입니다. 테이블 필드를 조합하고 해당 필드에 대한 정렬 조건 등을 설정한 후에 정보 목록 확인이 가능합니다.
Secondary Index는 이런 index의 모음이고 Views라고 되어 있는 것은 index 들을 의미하는 것으로 보입니다. 그래도 조금 다른 것은 Map/Reduce 옵션에 따라 데이터 카운트 등의 통계용도 Views에 추가할 수 있습니다.
Search Indexes는 단어처럼 검색을 위한 index 입니다. 검색 필드를 지정해서 해당 필드만을 검색하여 결과를 뿌려주도록 하는 것 같습니다. 여기에서 like 검색을 하고 싶었습니다. 검색, 검색, 검색.. ^^ 검색이 되어야 서비스를 할 수 있으니...
검색을 위해서는 Search Indexes를 알아야 합니다. index function 내용을 전체 알 필요는 없지만, 꼭 알아야 할 것들만 잠시 설명을, 저도 잘은 모르지만, 해 보겠습니다.
function (doc) {
index("default", doc.id);if (doc.latin_name) {
index("latin_name", doc.latin_name, { "store": true });
}
}
위 내용은 도큐먼트(테이블)의 검색 필드를 지정하는 것으로 doc.id, doc.latin_name을 검색어로 사용한다는 것입니다. 그런데 아직 확인하지 못한 것이 index("latin_name" << "latin_name"의 용도입니다. api에서 제공되는 검색 변수명은 q 하나 밖에 안보입니다.
?q= 검색은 가능하지만 ?latin_name= 검색은 오류가 납니다. 아직은 이 이상은 모르겠네요. =_=;;; 그래서 저는 저 "latin_name" 대신에 "default"로 바꾸었습니다. 이렇게 하면 q 파람 정보를 대입해 주는 것으로 보입니다.
그리고 like 검색은 "검색어*" 이렇게 검색어 뒤에 *를 추가하면 됩니다. 하지만 이것도 오른쪽만 가능하지 왼쪽에 붙이면 오류가 납니다. 제가 원하는 내용은 아닙니다만 일단 아쉬운 데로... =_=;; 테스트 사용 방법은 아래와 같습니다. search indexes의 animals를 선택하면 쿼리 실행 창이 나옵니다.
Search Indexes test
검색이 정상적으로 되었다면 해당 내용을 외부에서 테스트하기 위해서 API를 복사합니다.
Copy API URL
해당 내용을 저는 Postman 이라는 크롬 확장 프로그램에서 테스트를 했습니다. Method = GET, Authorization = Basic (아이디 비번 추가) 후 Send를 하시면 아래와 같이 나옵니다.
Postman test
누군가 검색어 왼쪽에 *를 붙일 수 있는 방법을 알려 주신다면 너무 너무 감사하겠습니다. ^^;;
다음은 50GB가 정말 무료인지, 서비스를 하려는 입장에서 다시 한번 과금 정책을 확인하고 지나가야할 것으로 보입니다. 실망스러울 것으로 보이긴 하지만.. 그래도 확인은 해봐야죠~~ ^^;; 잘못하면 털립니다. 서비스가 좋다면 모를까...