텍스트 검색을 위해서 Cache DB 를 테스트 해보고 있는데요, 속도가 빠르다고 해서요.
그런데, 삽입된 데이터의 값을 Cache ObjectScript로 가져올 때, %Text 타입의 값을 가져오려면 어떻게 하면 되나요? 예제도 올려주시면 감사하겠습니다.
%Text 타입 클래스는 %String 클래스를 상속 받는 하위 클래스이므로, %String과 동일하게 그 값에 액세스할 수 있어엽.
가령, 아래와 같은 테이블(클래스)이 있다고 하면,
Class User.MyTable Extends (%Persistent, %Populate, %XML.Adaptor) [ ClassType = persistent, DdlAllowed, Owner = UnknownUser, ProcedureBlock, SqlRowIdPrivate, SqlTableName = MyTable, StorageStrategy = "" ] { Property Name As %Library.String(MAXLEN = 100); Property Contacts As %Text(MAXLEN=10000); Index ContactsIndex On Contacts(KEYS); }
위 클래스의 데이터에 아래와 같은 터미널 명령어로 데이터를 삽입할 수 있습니다.
ENTREE>set a=##class(MyTable).%New() ENTREE>set a.Name="Test" ENTREE>set a.Contacts="Twitter-KindMan, NateOn-EvilMan" ENTREE>w a.%Save() 1
아래와 같은 명령어로 값을 가져옵니다.
ENTREE>k ENTREE>set a=##class(MyTable).%OpenId(11) ENTREE>w a.Contacts Twitter-KindMan, NateOn-EvilMan ENTREE>
그리고, 아래와 같은 SQL문으로 Free Text 검색을 할 수 있습니다.
select * from MyTable where contacts %contains('nateon')
만약, Contacts 안에 *한글* 문자가 들어간다면, %Text 타입 프로퍼티 파라미터 중 LANGUAGECLASS라는 놈에 값을 %Text.Japanese로 주면 됩니다. 아래 참조.
Property Contacts As %Text( LANGUAGECLASS="%Text.Japanese",MAXLEN=10000);