context option의 기본적인 사용방법
--------------------------------------------------------------------
1. parameter 설정
(1) $ORACLE_HOME/dbs directory내의 init.ora file 내에
TEXT_ENABLE = TRUE로 지정되어야 한다.
이때, 는 환경변수에 지정된 ORACLE_SID에 해당하는
값으로, ORA7인 경우가 많다.
(2) open_cursors를 약 2000 정도로 크게 지정한다.
2. one step query와 two step query사용방법 (1) ~ (5)은 동일
(1) ctxsrv -user ctxsys/ctxsys -log ctx.log &
또는 ctxctl에서 start 명령 이용
이 context server process는 하나만 실행시키기 보다는 context
option을 사용하게 되는 user수만큼 띄우는 것이 performance에 좋다.
또는 ctxctl을 수행시킨 후 start n
(여기에서 n은 context server의 갯수)으로 실행하여도 된다.
(2) context option을 사용할 사용자에게 다음과 같은 role에 대한 권한을
부여한다.
os> sqlplus ctxsys/ctxsys
sql> grant ctxapp to username;
(3) pl/sql에서 때때로 role을 통해 부여받은 권한을 인식하지 못하는 경우
가 있으므로 다음과 같이 명시적으로 권한을 부여한다.
sqlplus ctxsys/ctxsys
sql> grant execute on ctx_query to username;
sql> grant execute on ctx_ddl to username;
(4) sqlplus username/password
sql> exec ctx_ddl.create_policy('policy_name', 'table_name.column_name',
lexer_pref=>'CTXSYS.KOREAN');
* 이때 policy_name은 임의의 이름을 지정하면 된다.
** primary key가 두개 이상의 column으로 구성되어 있다면,
textkey=>'pk1,...,pkn'으로 지정한다.
즉 pk1, pk2 column으로 primary key가 구성되었다면
exec ctx_ddl.create_policy('policy_name',
'table_name.column_name',
textkey=>'pk1,pk2',lexer_pref=>'CTXSYS.KOREAN');
*** composite textkey인 경우 table의 primary key를 구성하는 column이 16개
까지만 가능하다.
**** primary key가 복수개인 것은 가능하지만 policy를 구성하는 column을
복수개로 지정할 수는 없다.
(5) exec ctx_ddl.create_index('policy_name');
여기에서 policy_name은 create_plicy에서 생성한 policy_name을 지정한다.
(6)-1 1 step query방법(stored procedure내에 사용하는 것은 불가능)
다음과 같이 where절에 contains라는 새로운 연산자를 이용하여 query한다.
예를 들어,
select * from table_name
where contains(column_name, '찾고자_하는_형태소') > 0;
(6)-2 2 step query방법
a. 먼저 다음과 같은 result table을 만든다.
create table ctx_result
(textkey varchar2(64),
textkey2 varchar2(64),
...
textkeyn varchar2(64),
score number,
conid number);
* 이때, primary key를 구성하는 column의 갯수만큼 textkey가 필요하므로
primary key가 하나의 column으로 구성되어 있다면 위의 ctx_result
table의 구성 중 textkey2 ~ textkeyn은 빼고 textkey, score, conid,
3개의 column으로 result table을 만들면 된다.
** primary key column의 data type이 varchar2가 아니고 number라
하더라도 textkey는 무조건 varchar2(64)로 잡도록 한다.
*** conid는 하나의 result table을 여러 query가 공유하는 경우, qeury를
구별하여 주기위한 것이다.
2) 위에서 만든 result table을 이용하여 다음과 같이 두 단계의 query를
수행한다.
exec ctx_query.contains('policy_name', '찾고자_하는_형태소',
'ctx_result');
이때 찾고자_하는_형태소 부분에는 형태소 or 형태소, 형태소 | 형태소,
형태소 and 형태소, 형태소 & 형태소 등의 표현이 가능하다.
select score, primary_key, column_name
from table_name, result_name
where table_name.pk = ctx_result.textkey
and table_name.pk2 = ctx_result.textkey2
...
and table_name.pkn = ctx_result.textkeyn
order by score desc;
위의 query는 primary key를 구성하는 column이
라고 가정할 경우의 query문이며, primary key가 하나의 컬럼으로 이루어졌다면
and table_name.pk2 = ctx_result.textkey2
...
and table_name.pkn = ctx_result.textkeyn
부분은 불필요하다.
Previous Article : Designer R1.3.2를 Designer R2.1.2로 Upgrade
Next Article : Lock이 걸린 Session과 SQL문확인
--------------------------------------------------------------------
1. parameter 설정
(1) $ORACLE_HOME/dbs directory내의 init.ora file 내에
TEXT_ENABLE = TRUE로 지정되어야 한다.
이때, 는 환경변수에 지정된 ORACLE_SID에 해당하는
값으로, ORA7인 경우가 많다.
(2) open_cursors를 약 2000 정도로 크게 지정한다.
2. one step query와 two step query사용방법 (1) ~ (5)은 동일
(1) ctxsrv -user ctxsys/ctxsys -log ctx.log &
또는 ctxctl에서 start 명령 이용
이 context server process는 하나만 실행시키기 보다는 context
option을 사용하게 되는 user수만큼 띄우는 것이 performance에 좋다.
또는 ctxctl을 수행시킨 후 start n
(여기에서 n은 context server의 갯수)으로 실행하여도 된다.
(2) context option을 사용할 사용자에게 다음과 같은 role에 대한 권한을
부여한다.
os> sqlplus ctxsys/ctxsys
sql> grant ctxapp to username;
(3) pl/sql에서 때때로 role을 통해 부여받은 권한을 인식하지 못하는 경우
가 있으므로 다음과 같이 명시적으로 권한을 부여한다.
sqlplus ctxsys/ctxsys
sql> grant execute on ctx_query to username;
sql> grant execute on ctx_ddl to username;
(4) sqlplus username/password
sql> exec ctx_ddl.create_policy('policy_name', 'table_name.column_name',
lexer_pref=>'CTXSYS.KOREAN');
* 이때 policy_name은 임의의 이름을 지정하면 된다.
** primary key가 두개 이상의 column으로 구성되어 있다면,
textkey=>'pk1,...,pkn'으로 지정한다.
즉 pk1, pk2 column으로 primary key가 구성되었다면
exec ctx_ddl.create_policy('policy_name',
'table_name.column_name',
textkey=>'pk1,pk2',lexer_pref=>'CTXSYS.KOREAN');
*** composite textkey인 경우 table의 primary key를 구성하는 column이 16개
까지만 가능하다.
**** primary key가 복수개인 것은 가능하지만 policy를 구성하는 column을
복수개로 지정할 수는 없다.
(5) exec ctx_ddl.create_index('policy_name');
여기에서 policy_name은 create_plicy에서 생성한 policy_name을 지정한다.
(6)-1 1 step query방법(stored procedure내에 사용하는 것은 불가능)
다음과 같이 where절에 contains라는 새로운 연산자를 이용하여 query한다.
예를 들어,
select * from table_name
where contains(column_name, '찾고자_하는_형태소') > 0;
(6)-2 2 step query방법
a. 먼저 다음과 같은 result table을 만든다.
create table ctx_result
(textkey varchar2(64),
textkey2 varchar2(64),
...
textkeyn varchar2(64),
score number,
conid number);
* 이때, primary key를 구성하는 column의 갯수만큼 textkey가 필요하므로
primary key가 하나의 column으로 구성되어 있다면 위의 ctx_result
table의 구성 중 textkey2 ~ textkeyn은 빼고 textkey, score, conid,
3개의 column으로 result table을 만들면 된다.
** primary key column의 data type이 varchar2가 아니고 number라
하더라도 textkey는 무조건 varchar2(64)로 잡도록 한다.
*** conid는 하나의 result table을 여러 query가 공유하는 경우, qeury를
구별하여 주기위한 것이다.
2) 위에서 만든 result table을 이용하여 다음과 같이 두 단계의 query를
수행한다.
exec ctx_query.contains('policy_name', '찾고자_하는_형태소',
'ctx_result');
이때 찾고자_하는_형태소 부분에는 형태소 or 형태소, 형태소 | 형태소,
형태소 and 형태소, 형태소 & 형태소 등의 표현이 가능하다.
select score, primary_key, column_name
from table_name, result_name
where table_name.pk = ctx_result.textkey
and table_name.pk2 = ctx_result.textkey2
...
and table_name.pkn = ctx_result.textkeyn
order by score desc;
위의 query는 primary key를 구성하는 column이
라고 가정할 경우의 query문이며, primary key가 하나의 컬럼으로 이루어졌다면
and table_name.pk2 = ctx_result.textkey2
...
and table_name.pkn = ctx_result.textkeyn
부분은 불필요하다.
Previous Article : Designer R1.3.2를 Designer R2.1.2로 Upgrade
Next Article : Lock이 걸린 Session과 SQL문확인
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(6/23)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(6/23)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(6/23)[기업100%환급]SQL기초에서 Schema Object까지
(6/30)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/30)[기업100%환급]안드로이드개발자과정
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(6/17)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/18)C#,ASP.NET마스터
(6/19)웹퍼블리싱 마스터
(6/19)Spring3.X, MyBatis, Hibernate실무과정
(6/24)안드로이드개발자과정
(6/24)MyBatis3.X, Hibernate4.X ORM실무과정
(6/26)SQL초보에서실전전문가까지
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
주말(10:00~17:50) 개강
(6/21)Spring3.X, MyBatis, Hibernate실무과정
(6/21)MyBatis3.X, Hibernate4.X ORM실무과정
(6/21)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/28)SQL초보에서 Schema Object까지
(6/28)안드로이드개발자과정
(6/28)개발자를위한PLSQL,SQL튜닝,힌트
(6/28)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/28)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/13)C#,ASP.NET마스터
주말저녁(18:30~22:20) 개강
(6/28)JAVA,Network&WEB&Framework
(6/28)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(6/23)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(6/23)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(6/23)[기업100%환급]SQL기초에서 Schema Object까지
(6/30)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/30)[기업100%환급]안드로이드개발자과정
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
평일야간(19:00~21:50) 개강
(6/17)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/18)C#,ASP.NET마스터
(6/19)웹퍼블리싱 마스터
(6/19)Spring3.X, MyBatis, Hibernate실무과정
(6/24)안드로이드개발자과정
(6/24)MyBatis3.X, Hibernate4.X ORM실무과정
(6/26)SQL초보에서실전전문가까지
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
주말(10:00~17:50) 개강
(6/21)Spring3.X, MyBatis, Hibernate실무과정
(6/21)MyBatis3.X, Hibernate4.X ORM실무과정
(6/21)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/28)SQL초보에서 Schema Object까지
(6/28)안드로이드개발자과정
(6/28)개발자를위한PLSQL,SQL튜닝,힌트
(6/28)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/28)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/13)C#,ASP.NET마스터
주말저녁(18:30~22:20) 개강
(6/28)JAVA,Network&WEB&Framework
(6/28)SQL기초에서실무까지
댓글 없음:
댓글 쓰기