Oracle Text -- ctxsys.context
Hi
We are creating a oracle text index on one table . The table contains 200 million records
The script is failing in the middle by giving the error unable to extend temp segement by 128 in temp table space.
Can you please provide any suggestions of how this issue can be rectified.
Also Can we use nosort option with text indexes.
Regards
Ramakrishna
Are you using automatic PGA work area sizing?
You could switch to manual for this session and override sort_area_size.
Also, memory parameters of index can be changed.
See:
http://download.oracle.com/docs/cd/E11882_01/text.112/e16594/aoptim.htm#i1006756
Similar Messages
-
Oracle Text, ctxsys.context problem with number column
Hi,
DB 11.2.0.3
Is there any solution to create ctxsys.context index on number column ? Or I have to create other index type ?
When I try do that (create ctxsys.context index), I get
09:01:18 ORA-29855: wystąpił błąd przy wykonywaniu podprogramu ODCIINDEXCREATE (An error has occurred in the performance of the subprogram)
09:01:18 ORA-20000: Oracle Text - błąd: (- error:)
09:01:18 DRG-10509: niepoprawna kolumna tekstowa: ITEM_TYPE (invalid text column:)
09:01:18 ORA-06512: przy "CTXSYS.DRUE", linia 160
09:01:18 ORA-06512: przy "CTXSYS.TEXTINDEXMETHODS", linia 366Btw, is there possible to search like "*LIKE %123%*" clause any of index (in contains) ?
Edited by: Ndejo on 2012-11-21 00:53The multi_column_datastore says that the text to be indexed should be fetched from the supplied COLUMNS list rather than from the actual column the index is created on.
So in this case we're fetching the contents of "theNumber" column, converting it to text, and indexing it.
You don't necessarily need a dummy column, if "a_title" is a varchar column you could create the index on that instead.
For example:
SQL> create table mytab( a_id number, a_code number, a_title varchar2(80), a_subtitle varchar2(80), a_info clob );
Table created.
SQL> insert into mytab values ( 12, 9812376, 'foo is the title',
2 'foobar is the subtitle', 'the info column will not be indexed' );
1 row created.
SQL> exec ctx_ddl.drop_preference( 'myds' )
PL/SQL procedure successfully completed.
SQL> exec ctx_ddl.create_preference( 'myds', 'MULTI_COLUMN_DATASTORE' )
PL/SQL procedure successfully completed.
SQL> exec ctx_ddl.set_attribute( 'myds', 'COLUMNS', 'a_code, a_title, a_subtitle' )
PL/SQL procedure successfully completed.
SQL> create index myindex on mytab (a_title) indextype is ctxsys.context
2 parameters ('datastore myds');
Index created.
SQL> select a_id from mytab where contains (a_title, '%123%') > 0;
A_ID
12
SQL> select a_id from mytab where contains (a_title, 'foo') > 0;
A_ID
12If you want to be able to search within a particular column, then add "section group CTXSYS.AUTO_SECTION_GROUP" to the parameters clause, and you can then do:
SQL> select a_id from mytab where contains (a_title, 'foobar WITHIN a_subtitle') > 0;
A_ID
12 -
Oracle Text - CTX Context Index Soundex Problem
Hi,
I'm running into a problem with Oracle Text when searching using the ! (soundex) option. I've created a simple test example to highlight the issue.
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit
Windows 2008 Server 64-bit
create table test_tab (test_col varchar2(200));
insert all
into test_tab (test_col) values ('ab-tönes')
into test_tab (test_col) values ('ab-tones')
into test_tab (test_col) values ('abtones')
into test_tab (test_col) values ('ab tones')
into test_tab (test_col) values ('ab-tanes')
select * from dual
select * from test_tab
begin
ctx_ddl.create_preference ('test_lex1', 'basic_lexer');
ctx_ddl.set_attribute ('test_lex1', 'whitespace', '/\|-_+&''');
ctx_ddl.set_attribute('test_lex1','base_letter','YES');
-- ctx_ddl.set_attribute('test_lex1','skipjoins','-');
end;
create index test_idx on test_tab (test_col)
indextype is ctxsys.context
parameters
('lexer test_lex1'
select token_text from dr$test_idx$i;
TOKEN_TEXT
AB
ABTONES
TANES
TONES
select * from test_tab where contains (test_col, '!ab tones') > 0;
TEST_COL
ab-tönes
ab-tones
ab tones
select * from test_tab where soundex(test_col) = soundex('ab tones');
TEST_COL
ab-tönes
ab-tones
abtones
ab tones
ab-tanes
So my question is, can anyone suggest an approach whereby I can get the Oracle Text Context index (or CTXCAT index if it's more appropriate) to return all 5 rows like the simple Soundex is doing?
I can't really use soundex as this search query will form part of a search screen for a multi-language application. Soundex is limited to English sounding words, so I need the solution to be able to compare strings that may not "sound" English.
It must be an attribute of the BASIC_LEXER, and I've tried skipjoins, start/end-joins, stop lists, but I just cannot get the Soundex feature of Oracle Text to function like the SOUNDEX() function!
Looking at how the tokens are stored dr$test_idx$i I need Oracle Text to almost concat 'AB' and 'TONES' to search as a single string.
Any help greatly appreciated.
Thanks,I am not getting the same problem that you are getting with the umlat, but I don't see what is different. Please post the result of:
select ctx_report.create_index_script ('test_idx') from dual;
Here are the results on my system. Perhaps you can spot the difference. I added an empty_stoplist, so that it won't print out a long list of stopwords.
SCOTT@orcl12c> create table test_tab (test_col varchar2(200))
2 /
Table created.
SCOTT@orcl12c> insert all
2 into test_tab (test_col) values ('ab-tönes')
3 into test_tab (test_col) values ('ab-tones')
4 into test_tab (test_col) values ('abtones')
5 into test_tab (test_col) values ('ab tones')
6 into test_tab (test_col) values ('ab-tanes')
7 select * from dual
8 /
5 rows created.
SCOTT@orcl12c> select * from test_tab
2 /
TEST_COL
ab-tönes
ab-tones
abtones
ab tones
ab-tanes
5 rows selected.
SCOTT@orcl12c> begin
2 ctx_ddl.create_preference ('test_lex1', 'basic_lexer');
3 ctx_ddl.set_attribute('test_lex1','base_letter','YES');
4 end;
5 /
PL/SQL procedure successfully completed.
SCOTT@orcl12c> create or replace procedure test_proc
2 (p_rowid in rowid,
3 p_clob in out nocopy clob)
4 as
5 begin
6 select replace (translate (test_col, '/\|-_+&''', ' '), ' ', '')
7 into p_clob
8 from test_tab
9 where rowid = p_rowid;
10 end test_proc;
11 /
Procedure created.
SCOTT@orcl12c> show errors
No errors.
SCOTT@orcl12c> begin
2 ctx_ddl.create_preference ('test_ds', 'user_datastore');
3 ctx_ddl.set_attribute ('test_ds', 'procedure', 'test_proc');
4 end;
5 /
PL/SQL procedure successfully completed.
SCOTT@orcl12c> create index test_idx on test_tab (test_col)
2 indextype is ctxsys.context
3 parameters
4 ('lexer test_lex1
5 datastore test_ds
6 stoplist ctxsys.empty_stoplist')
7 /
Index created.
SCOTT@orcl12c> select token_text from dr$test_idx$i
2 /
TOKEN_TEXT
ABTANES
ABTONES
2 rows selected.
SCOTT@orcl12c> variable search_string varchar2(100)
SCOTT@orcl12c> exec :search_string := 'ab tones'
PL/SQL procedure successfully completed.
SCOTT@orcl12c> select * from test_tab
2 where contains
3 (test_col,
4 '!' || replace (:search_string, ' ', ' !') ||
5 ' or !' || replace (:search_string, ' ', '')) > 0
6 /
TEST_COL
ab-tönes
ab-tones
abtones
ab tones
ab-tanes
5 rows selected.
SCOTT@orcl12c> exec :search_string := 'abtones'
PL/SQL procedure successfully completed.
SCOTT@orcl12c> /
TEST_COL
ab-tönes
ab-tones
abtones
ab tones
ab-tanes
5 rows selected.
SCOTT@orcl12c> exec :search_string := 'ab tönes'
PL/SQL procedure successfully completed.
SCOTT@orcl12c> /
TEST_COL
ab-tönes
ab-tones
abtones
ab tones
ab-tanes
5 rows selected.
SCOTT@orcl12c> select ctx_report.create_index_script ('test_idx') from dual
2 /
CTX_REPORT.CREATE_INDEX_SCRIPT('TEST_IDX')
begin
ctx_ddl.create_preference('"TEST_IDX_DST"','USER_DATASTORE');
ctx_ddl.set_attribute('"TEST_IDX_DST"','PROCEDURE','"SCOTT"."TEST_PROC"');
end;
begin
ctx_ddl.create_preference('"TEST_IDX_FIL"','NULL_FILTER');
end;
begin
ctx_ddl.create_section_group('"TEST_IDX_SGP"','NULL_SECTION_GROUP');
end;
begin
ctx_ddl.create_preference('"TEST_IDX_LEX"','BASIC_LEXER');
ctx_ddl.set_attribute('"TEST_IDX_LEX"','BASE_LETTER','YES');
end;
begin
ctx_ddl.create_preference('"TEST_IDX_WDL"','BASIC_WORDLIST');
ctx_ddl.set_attribute('"TEST_IDX_WDL"','STEMMER','ENGLISH');
ctx_ddl.set_attribute('"TEST_IDX_WDL"','FUZZY_MATCH','GENERIC');
end;
begin
ctx_ddl.create_stoplist('"TEST_IDX_SPL"','BASIC_STOPLIST');
end;
begin
ctx_ddl.create_preference('"TEST_IDX_STO"','BASIC_STORAGE');
ctx_ddl.set_attribute('"TEST_IDX_STO"','R_TABLE_CLAUSE','lob (data) store as (
cache)');
ctx_ddl.set_attribute('"TEST_IDX_STO"','I_INDEX_CLAUSE','compress 2');
end;
begin
ctx_output.start_log('TEST_IDX_LOG');
end;
create index "SCOTT"."TEST_IDX"
on "SCOTT"."TEST_TAB"
("TEST_COL")
indextype is ctxsys.context
parameters('
datastore "TEST_IDX_DST"
filter "TEST_IDX_FIL"
section group "TEST_IDX_SGP"
lexer "TEST_IDX_LEX"
wordlist "TEST_IDX_WDL"
stoplist "TEST_IDX_SPL"
storage "TEST_IDX_STO"
begin
ctx_output.end_log;
end;
1 row selected. -
Oracle Text search returning no results
Hi,
I have created an oracle text (ctxsys.context) on a BLOB column which has various documents of .doc,.docx,.pdf, types.
CREATE INDEX IND_RESUME_DETAILS ON RESUME_DETAILS (RESUME)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('datastore ctxsys.default_datastore filter ctxsys.inso_filter sync (on commit)')
However, the query using 'Contains' does not return any search results.
select employee_number,Score(1) from resume_details where CONTAINS(RESUME,'JAVA',1)>0 order by score(1) desc
On checking the 'ctx_user_index_errors' view , it has an entry for every row in the table. However, it does not show any error in the err_text column
ERR_INDEX_NAME
ERR_TIMESTAMP
ERR_TEXTKEY
ERR_TEXT
IND_RESUME_DETAILS
5/8/2014 18:27
AAAl0GAAGAAEFoWAAC
IND_RESUME_DETAILS
5/8/2014 18:27
AAAl0GAAGAAEFoWAAD
IND_RESUME_DETAILS
5/8/2014 18:27
AAAl0GAAGAAEFoWAAE
Even the index status shows 'VALID'.
I tried dropping and recreating indexes, dropping and recreating the table.. However, it's not working at all.
What's surprising is,it used to work earlier without any problems.
I also have another context index on another column on the same table which is a varchar2 column. The search on that column works absolutely fine.
The database version is
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0
Request someone in helping me root cause this issue. Any help is appreciated.
ThanksHi Barbara,
Still the same issue.
Its putting an entry into 'ctx_user_index_errors' but with nothing in the err_text column..Hence, difficult to track what or where the problem lies.
And moreover, the same index was working earlier. Just stopped working all of a sudden. -
Oracle Text, multi_column_datastore describe index
Referring to Re: Oracle Text, ctxsys.context problem with number column
In TOAD or SQL Navigator you can click on some object (like table, index) and click on tab "script" where is generated the code to create it.
Assuming that I am a person who sees the index for the first time where/how I can find multi_columns/parameters with which the index was created ?
For example:
exec ctx_ddl.drop_preference( 'myds' );
exec ctx_ddl.create_preference( 'myds', 'MULTI_COLUMN_DATASTORE' );
exec ctx_ddl.set_attribute( 'myds', 'COLUMNS', 'item_barcode, item_title, item_subtitle' );
CREATE INDEX i_index_test
ON item (item_title)
INDEXTYPE IS ctxsys.context
PARAMETERS ( 'datastore myds' );And script says:
CREATE INDEX PLSQL.I_INDEX_TEST ON PLSQL.ITEM
(ITEM_TITLE)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('datastore myds')
NOPARALLEL;
Where I can find datastore "myds" ?You can use ctx_report to get all the information about an index.
I use it from SQL*Plus like this:
set pagesize 0
set heading off
set trimspool on
set long 500000
spool index.sql
select ctx_report.create_index_script('MyIndexName') from dual;
spool offThe only thing this won't give you is the source for any procedures used in the user_datastore. You can get that from user_sources. -
Suggestion: Oracle text CONTEXT index on one or more columns ?
Hi,
I'm implementing Oracle text using CONTEXT ..... and would like to ask you for performance suggestion ...
I have a table of Articles .... with columns .. TITLE, SUBTITLE , BODY ...
Now is it better from performance point of view to move all three columns into one dummy column ... with name like FULLTEXT ... and put index on this single column,
and then use CONTAINS(FULLTEXT,'...')>0
Or is it almost the same for oracle if i put indexes on all three columns and then call:
CONTAINS(TITLE,'...')>0 OR CONTAINS(SUBTITLE,'...')>0 OR CONTAINS(BODY,'...')>0
I actually don't care if the result is a match in TITLE OR SUBTITLE OR BODY ....
So if i move into some FULLTEXT column, then i have duplicate data in a article row ... but if i create indexes for each column, than oracle has 2x more to index,optimize and search ... am I wright ?
Table has 1.8mil records ...
Thank you.
Krismackrispi wrote:
Now is it better from performance point of view to move all three columns into one dummy column ... with name like FULLTEXT ... and put index on this single column,
and then use CONTAINS(FULLTEXT,'...')>0What version of Oracle are you on? If 11 then you could use a virtual column to do this, otherwise you'd have to write code to maintain the column which can get messy.
mackrispi wrote:
Or is it almost the same for oracle if i put indexes on all three columns and then call:
CONTAINS(TITLE,'...')>0 OR CONTAINS(SUBTITLE,'...')>0 OR CONTAINS(BODY,'...')>0Benchmark it and find out :)
Another option would be something like this.
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:9455353124561
Were i you, i would try out those 3 approaches and see which meet your performance requirements and weigh that with the ease of implementation and administration. -
ORACLE TEXT 10G의 수동 설치와, 설치 해제 방법
제품 : ORACLE SERVER
작성날짜 : 2006-03-17
ORACLE TEXT 10G의 수동 설치와, 설치 해제 방법
===================================
PURPOSE
이 문서는, Oracle Text 10gR1의 수동 설치와 설치 내용의 확인, 설치 해제 방법을 기술하고 있다.
이 정보는, Oracle 10g Release 1 (10.1.0.2)의 Text를 구성하는 데이터베이스 관리자와, 기술 지원 담당자에게
유용한 정보가 될 것이다.
Explanation
* 주의 사항
오라클 데이터베이스를 Database Configuration Assistant (DBCA)를 사용하여 생성하였다면, Text는
기본적으로 설치되며, 별도로 아래 기술된 절차에 따라 설치를 진행할 필요가 없다.
Oracle Text는 모든 데이터베이스 에디션에 (Oracle Database Standard Edition One,
Oracle Database Standard Edition (SE), Oracle Database Enterprise Edition (EE),
Oracle Database Personal Edition ) 추가 라이센스 비용 없이 사용할 수 있다.
Oracle Database Enterprise Edition (EE)의 경우, Oracle Text를 설치하기전에 Oracle Data Mining (ODM)
기능을 사용할 수 있게 하는 것이 좋다. 이와 같이 하면, SVM classifier 와 KMEANS clustering 기능을 사용
할 수 있다. RULE classifier 나 TEXTK clustering과 같은 다른 기능은 ODM이 설치되지 않는 상태에서도
실행 가능하다.
* 설치 절차
데이터베이스를 수동으로 생성하였거나, 데이터베이스 생성 후 Text를 나중에 별도로 설치하기 위해서는
다음과 같은 절차를 따른다.
참고: SQL*Plus에서 $ORACLE_HOME 대신에 '?'를 사용하였다.
1. SQL*Plus에 SYSDBA로 연결 한 수, 다음과 같이 스크립트를 호출하면, CTXSYS 스키마에 Text dictionary가
생성된다.
SQL> connect SYS/password as SYSDBA
SQL> spool text_install.txt
SQL>@?/ctx/admin/catctx.sql CTXSYS SYSAUX TEMP LOCK
위 명령에서:
CTXSYS - ctxsys 사용자의 패스워드
SYSAUX - ctxsys 사용자의 default tablespace명
TEMP - ctxsys 사용자의 temporary tablespace명
LOCK|NOLOCK - ctxsys 사용자 계정을 잠글 것인지, 잠금 해제 할 것인지 여부
2. 위 작업이 끝나면 언어별로 적절한 default preference를 생성한다.
Oracle text가 지원하는 언어별 default preference는 /ctx/admin/defaults 디렉토리에 있다.
예를 들면, English(US), Danish(DK), Dutch(NL), Finnish(SF), French(F), German(D), Italian(IT),
Portuguese(PT), Spanish(E), Swedish(S) 등이 있다.
이들 스크립트는 drdefXX.sql과 같은 파일 명을 갖는데, 여기서 XX는 사용하고자 하는 국제
코드이다. 예를 들어 US default preference를 수동으로 설치하기 위해서는 sqlplus에 CTXSYS
계정으로 로그인 한 후, 'drdefus.sql'을 다음과 같이 실행시킨다.
예를 들어 한국의 경우엔 KR default preference를 수동으로 설치하기 위해서는 sqlplus에 CTXSYS
계정으로 로그인 한 후, 'drdefkr.sql'을 다음과 같이 실행시킨다.
SQL> connect CTXSYS/password
SQL>@?/ctx/admin/defaults/drdefko.sql
SQL> spool off
*** 주의 ***
만약 Text를 설치하기 전에 Oracle Data Mining (ODM)을 설치하였다면, text_install.txt 파일에서
public synonym과 관련된 ORA-955 에러가 남겨진 것을 확인 할 수 있다. 예를 들어 dm_svm_build 와
관련된 에러가 발생하게 되는데 이 에러는 무시하면 된다. CTXSYS 스키마에 API를 휴내내는 더미
패키지를 생성하는데, 설치 과정에서 public synonym을 생성하는 것을 시도해 보기 때문이다.
ODM이 설치되어 있는 상태에서는, public synonym 생성은 실패하게 되고, public synonym이
ODM의 객체를 가리키는 상태가 되므로, 정상적인 동작이 된다.
3. Text 10gR1 (10.1.0.x) 정상 설치 여부에 대한 확인
a. 모든 Text 객체가 CTXSYS 스키마에 정상적으로 설치 되었는지 여부를 확인한다.
b. CTXSYS 스키마에 속한 객체중 invalid 상태인 것들이 없는 것이 있는지 확인한다.
정상적으로 설치된 상태에서는 결과 값으로 "no rows selected"가 나와야 한다.
만약 invalid 상태의 객체가 있다면 수동으로 이들 객체를 컴파일 해 주어야 한다.
------------------- cut here ------------------------------
connect SYS/password as SYSDBA
set pages 1000
col object_name format a40
col object_type format a20
col comp_name format a30
column library_name format a8
column file_spec format a60 wrap
spool text_install_verification.log
-- check on setup
select comp_name, status, substr(version,1,10) as version
from dba_registry
where comp_id = 'CONTEXT';
select * from ctxsys.ctx_version;
select substr(ctxsys.dri_version,1,10) VER_CODE from dual;
select count(*)
from dba_objects where owner='CTXSYS';
-- Get a summary count
select object_type, count(*)
from dba_objects where owner='CTXSYS'
group by object_type;
-- Any invalid objects
select object_name, object_type, status
from dba_objects
where owner='CTXSYS'
and status != 'VALID'
order by object_name;
spool off
------------------- cut here ------------------------------
정상적으로 설치가 되었다면 다음과 같은 결과가 나와야 한다:
SQL> select comp_name, status, substr(version,1,10) as version
from dba_registry
where comp_id = 'CONTEXT';
COMP_NAME STATUS VERSION
Oracle Text VALID 10.1.0.2.0
SQL> select * from ctxsys.ctx_version;
VER_DICT VER_CODE
10.1.0.2.0 10.1.0.2.0
SQL> select substr(ctxsys.dri_version,1,10) VER_CODE from dual;
VER_CODE
10.1.0.2.0
SQL> select count(*)
from dba_objects where owner='CTXSYS';
COUNT(*)
338
SQL> select object_type, count(*)
from dba_objects where owner='CTXSYS'
group by object_type;
OBJECT_TYPE COUNT(*)
FUNCTION 5
INDEX 46
INDEXTYPE 4
LIBRARY 1
LOB 1
OPERATOR 6
PACKAGE 71
PACKAGE BODY 58
PROCEDURE 3
SEQUENCE 3
TABLE 37
TYPE 42
TYPE BODY 7
VIEW 54
14 rows selected.
SQL> select object_name, object_type, status
from dba_objects
where owner='CTXSYS'
and status != 'VALID'
order by object_name;
no rows selected
SQL>
4. 수동으로 설치 해제를 하는 절차
*** 주의 ***
Oracle Text를 설치 해제 하기 전에, CTXSYS 이외의 계정에서 생성한 모든 Text 인덱스를 drop 시키는 것이
좋다.
CTXSYS 스키마의 Text dictionary는 SQL*Plus에 SYSDBA로 연결하여 다음과 같이 스크립트를 실행 시킴으로써
제거된다.
SQL> connect SYS/password as SYSDBA
SQL> spool spool textdeinstall.log
SQL>@?/ctx/admin/catnoctx.sql
SQL> spool off
Review the output file textdeinstall.log for errors.
Deinstallation of Oracle Text 10.1.0.x is complete.
Example
Reference Documents
Oracle Text Reference 10g Release 1 (10.1) Part Number B10730-02
Note 280713.1 Manual installation, deinstallation of Oracle Text 10gR1 -
Oracle Text, create index (indextype is ctxsys.context)
Dear sirs,
I am a new user of Oracle Text (Oracle 11g release 11.2) and I am unable to create an index of type ctxsys.context). Any suggestions?:
code:
drop table mytable;
drop index myindex force;
create table mytable(id number primary key, docs clob);
insert into mytable values(111555,'this text will be indexed');
insert into mytable values(111556,'this is a default datastore example');
commit;
create index myindex on mytable(docs)
indextype is ctxsys.context
parameters ('DATASTORE CTXSYS.DEFAULT_DATASTORE');
+++++++
error messages:
create index myindex on mytable(docs)
ERROR at line 1:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
ORA-06508: PL/SQL: could not find program unit being called
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366Please check for invalid objects. Log on as sys or system and run:
select owner, object_name, object_type from all_objects where status='INVALID';
Post the results here and we'll advise the next step.
If any objects owned by CTXSYS are invalid you may need to recompile the CTXSYS schema. -
database version 11.2.0.4
rac two node
CREATE INDEX MAXIMO.ACTCI_NDX3 ON MAXIMO.ACTCI
(DESCRIPTION)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('lexer global_lexer language column LANGCODE')
ERROR at line 1:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-10700: preference does not exist: global_lexer
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366Like the error message says, you don't have a global_lexer. So, you need to create a global_lexer and that lexer must have at least a default sub_lexer, then you can use that global_lexer in your index parameters. Please see the demonstration below, including reproduction of the error and solution.
SCOTT@orcl12c> -- reproduction of problem:
SCOTT@orcl12c> CREATE TABLE actci
2 (description VARCHAR2(60),
3 langcode VARCHAR2(30))
4 /
Table created.
SCOTT@orcl12c> CREATE INDEX ACTCI_NDX3 ON ACTCI (DESCRIPTION)
2 INDEXTYPE IS CTXSYS.CONTEXT
3 PARAMETERS('lexer global_lexer language column LANGCODE')
4 /
CREATE INDEX ACTCI_NDX3 ON ACTCI (DESCRIPTION)
ERROR at line 1:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-10700: preference does not exist: global_lexer
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366
SCOTT@orcl12c> -- solution:
SCOTT@orcl12c> DROP INDEX actci_ndx3
2 /
Index dropped.
SCOTT@orcl12c> BEGIN
2 CTX_DDL.CREATE_PREFERENCE ('global_lexer', 'multi_lexer');
3 CTX_DDL.CREATE_PREFERENCE ('english_lexer', 'basic_lexer');
4 CTX_DDL.ADD_SUB_LEXER ('global_lexer', 'default', 'english_lexer');
5 END;
6 /
PL/SQL procedure successfully completed.
SCOTT@orcl12c> CREATE INDEX ACTCI_NDX3 ON ACTCI (DESCRIPTION)
2 INDEXTYPE IS CTXSYS.CONTEXT
3 PARAMETERS('lexer global_lexer language column LANGCODE')
4 /
Index created. -
CTXSYS.Context in Oracle Multitenant Database (Cloud) - is this supported?
Hello guys,
I am new to the world of apex which makes the administration console for the oracle database cloud a trivial ground for me.
I am trying to setup context indextype which i require for some applications on the jcs front end. however, i am having no luck setting up this index types.
I havent been able to find any resources regarding the CTXSYS package within the oracle database cloud documentation so I am hoping someone out here may have a few tips or tricks for me.
How can I grant execute on CTXSYS.CTX_DDL object to my database users?
thanks.There's no oracle text support for database cloud services shamefully.
I cant help but wonder why oracle wont support features of its own product, not something to brag about "Oracle!!!!" -
Oracle text performance with context search indexes
Search performance using context index.
We are intending to move our search engine to a new one based on Oracle Text, but we are meeting some
bad performance issues when using search.
Our application allows the user to search stored documents by name, object identifier and annotations(formerly set on objects).
For example, suppose I want to find a document named ImportSax2.c: according to user set parameters, our search engine format the following
search queries :
1) If the user explicitely ask for a search by document name, the query is the following one =>
select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c WITHIN objname' , 1 ) > 0;
2) If the user don't specify any extra parameters, the query is the following one =>
select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c' , 1 ) > 0;
Oracle text only need around 7 seconds to answer the second query, whereas it need around 50 seconds to give an answer for the first query.
Here is a part of the sql script used for creating the Oracle Text index on the column OBJFIELDURL
(this column stores a path to an xml file containing properties that have to be indexed for each object) :
begin
Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST');
ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 200) ;
ctx_ddl.set_attribute('wildcard_pref','prefix_min_length',3);
ctx_ddl.set_attribute('wildcard_pref','prefix_max_length',6);
ctx_ddl.set_attribute('wildcard_pref','STEMMER','AUTO');
ctx_ddl.set_attribute('wildcard_pref','fuzzy_match','AUTO');
ctx_ddl.set_attribute('wildcard_pref','prefix_index','TRUE');
ctx_ddl.set_attribute('wildcard_pref','substring_index','TRUE');
end;
begin
ctx_ddl.create_preference('doc_lexer_perigee', 'BASIC_LEXER');
ctx_ddl.set_attribute('doc_lexer_perigee', 'printjoins', '_-');
ctx_ddl.set_attribute('doc_lexer_perigee', 'BASE_LETTER', 'YES');
ctx_ddl.set_attribute('doc_lexer_perigee','index_themes','yes');
ctx_ddl.create_preference('english_lexer','basic_lexer');
ctx_ddl.set_attribute('english_lexer','index_themes','yes');
ctx_ddl.set_attribute('english_lexer','theme_language','english');
ctx_ddl.set_attribute('english_lexer', 'printjoins', '_-');
ctx_ddl.set_attribute('english_lexer', 'BASE_LETTER', 'YES');
ctx_ddl.create_preference('german_lexer','basic_lexer');
ctx_ddl.set_attribute('german_lexer','composite','german');
ctx_ddl.set_attribute('german_lexer','alternate_spelling','GERMAN');
ctx_ddl.set_attribute('german_lexer','printjoins', '_-');
ctx_ddl.set_attribute('german_lexer', 'BASE_LETTER', 'YES');
ctx_ddl.set_attribute('german_lexer','NEW_GERMAN_SPELLING','YES');
ctx_ddl.set_attribute('german_lexer','OVERRIDE_BASE_LETTER','TRUE');
ctx_ddl.create_preference('japanese_lexer','JAPANESE_LEXER');
ctx_ddl.create_preference('global_lexer', 'multi_lexer');
ctx_ddl.add_sub_lexer('global_lexer','default','doc_lexer_perigee');
ctx_ddl.add_sub_lexer('global_lexer','german','german_lexer','ger');
ctx_ddl.add_sub_lexer('global_lexer','japanese','japanese_lexer','jpn');
ctx_ddl.add_sub_lexer('global_lexer','english','english_lexer','en');
end;
begin
ctx_ddl.create_section_group('axmlgroup', 'AUTO_SECTION_GROUP');
end;
drop index ADSOBJ_XOBJFIELDURL force;
create index ADSOBJ_XOBJFIELDURL on ADSOBJ(OBJFIELDURL) indextype is ctxsys.context
parameters
('datastore ctxsys.file_datastore
filter ctxsys.inso_filter
sync (on commit)
lexer global_lexer
language column OBJFIELDURLLANG
charset column OBJFIELDURLCHARSET
format column OBJFIELDURLFORMAT
section group axmlgroup
Wordlist wildcard_pref
Oracle created a table named DR$ADSOBJ_XOBJFIELDURL$I which now contains around 25 millions records.
ADSOBJ is the table contaings information for our documents,OBJFIELDURL is the field that contains the path to the xml file containing
data to index. That file looks like this :
<?xml version="1.0" encoding="UTF-8" ?>
<fields>
<OBJNAME><![CDATA[NomLnk_177527o.jpgp]]></OBJNAME>
<OBJREM><![CDATA[Z_CARACT_141]]></OBJREM>
<OBJID>295926o.jpgp</OBJID>
</fields>
Can someone tell me how I can make that kind of request
"select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c WITHIN objname' , 1 ) > 0;"
run faster ?Below are the execution plan for both the 2 requests :
select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c WITHIN objname' , 1 ) > 0
PLAN_TABLE_OUTPUT
| Id | Operation |Name |Rows |Bytes |Cost (%CPU)|
| 0 | SELECT STATEMENT | |1272 |119K | 4 (0) |
| 1 | TABLE ACCESS BY INDEX ROWID |ADSOBJ |1272 |119K | 4 (0) |
| 2 | DOMAIN INDEX |ADSOBJ_XOBJFIELDURL | | | 4 (0) |
Note
- 'PLAN_TABLE' is old version
Executed in 2 seconds
select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c' , 1 ) > 0
PLAN_TABLE_OUTPUT
| Id |Operation |Name |Rows |Bytes |Cost (%CPU)|
| 0 | SELECT STATEMENT | |1272 |119K | 4 (0) |
| 1 | TABLE ACCESS BY INDEX ROWID |ADSOBJ |1272 |119K | 4 (0) |
| 2 | DOMAIN INDEX |ADSOBJ_XOBJFIELDURL | | | 4 (0) |
Sorry for the result formatting, I can't get it "easily" readable :( -
Oracle Text (schema CTXSYS): additional licence costs?
Hi,
it's my understanding that through installing and using Oracle-Text (schema CTXSYS) no additional licence costs arise (for Oracle Enterprise Edition).
I'm asking this question in this forum just to be sure that my understanding is not wrong...
Many thanks
JHAs far as I know this is correct.
Oracle Text is neither listed as an Entreprise Edition option in US price list:
http://www.oracle.com/us/corporate/pricing/technology-price-list-070617.pdf
nor in Licensing Information:
http://download.oracle.com/docs/cd/E11882_01/license.112/e10594/toc.htm .
Edited by: P. Forstmann on 9 août 2011 10:25 -
Oracle Text Index Error - DRG-10700: preference does not exist: CTXSYS.DEFA
Hi we are having a Oracle 11g db.And we have installed CTX SYS package and provided the grants to the required schema.
But while creating the oracle text index, following error is thrown:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-10700: preference does not exist: CTXSYS.DEFAULT_LEXER
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 365
Following grnats are given :
GRANT EXECUTE ON CTXSYS.CTX_DDL TO <schema_name>;
GRANT APPOWN TO <schema_name>;
GRANT CTXAPP TO <schema_name>;
I have verifyed the ctxsys.CTX_PREFERENCES view which is having an entry as :
SELECT PRE_OWNER, PRE_NAME
FROM CTXSYS.CTX_PREFERENCES
WHERE PRE_NAME = 'DEFAULT_LEXER';
The Result is :
PRE_OWNER PRE_NAME
SYS DEFAULT_LEXER
Can you please assist if there is a way to update the permission on this DEFAULT_LEXER preference to set the PRE_OWNER as CTXSYS ?
ThanksThat's odd. If I run the same query I see:
SQL> SELECT PRE_OWNER, PRE_NAME
2 FROM CTXSYS.CTX_PREFERENCES
3 WHERE PRE_NAME = 'DEFAULT_LEXER';
PRE_OWNER PRE_NAME
CTXSYS DEFAULT_LEXERAre all your defaults like thsi? What do you see if you run
select pre_owner, pre_name from ctxsys.ctx_preferences where pre_name like 'DEFAULT%';
It would be easy enough to update the underlying table DR$PREFERENCES to fix the owner, but who knows what else might be wrong.
Has this database been updated from a 9i installation by any chance? -
ORACLE TEXT Context index so big, why ?
Hi,
One year ago, I've created a context index, for a table that had 2 million rows , and the context index was around 2.8 Mil rows ....
Today we have 2.9mil rows but the Context index has 95 Mil rows ??
Last weekend I did a FULL optimize index and it took 28hours and it was still not finished .... so this weekend I droped the index and re-created
it .... it took 6 hours ....
Now I started CTX_REPORT.INDEX_STATS to see how it looks like .... cause I exprected 95mil to become like 3.5mil max not more ....
Can anyone please tell me what should I check to see why did this happen so that the last 900.000 records created 91 mil rows in index ?
If there would be something wrong, why would the last 900.000 rows create something that prev 2mil rows did not ...
HEre is index creation :
CREATE INDEX ART_IDX ON MS_ARTICLE(ORATEXT) INDEXTYPE IS CTXSYS.CONTEXT FILTER BY ID,ART_DATE,MEDIA_CODE ORDER BY
ART_DATE DESC PARAMETERS (' LEXER ART_LEX STOPLIST CTXSYS.EMPTY_STOPLIST sync(ON COMMIT) DATASTORE DS_ART');If anyone needs definition of lexer od datastore, then please tell me what do I have to do to get definitions of that.
Thank you.
KRisHi,
Ok there must be something I did wrong .... cause after running INDEX_STATS ...I got this results :
===========================================
STATISTICS FOR "PRESCLIP"."ART_IDX"
===========================================
indexed documents: 2,876,228
allocated docids: 2,876,228
$I rows: 96,110,561
TOKEN STATISTICS
unique tokens: 5,584,188
average $I rows per token: 17.21
tokens with most $I rows:
JE (0:TEXT) 11,650
V (0:TEXT) 11,183
IN (0:TEXT) 10,085So I have expected Average rows per token to be 1 after droping and re-creating index ..... so what else must I do to get the number 96mil to 5.5mil ?
Thank you.
Kris -
Oracle Text Context index keeps growing. Optimize seems not to be working
Hi,
In my application I needed to search through many varchar columns from differents tables.
So I created a materialized view in which I concatenate those columns, since they exceed the 4000 characters I merged them concatenating the columns with the TO_CLOBS(column1) || TO_CLOB(column)... || TO_CLOB(columnN).
The query is complex, so the refresh is complete on demand for the view. We refresh it every 2 minutes.
The CONTEXT index is created with the sync on commit parameter.
The index then is synchronized every two minutes.
But when we run the optimize index it does not defrag the index. So it keeps growing.
Any idea ?
Thanks, and sorry for my poor english.
Edited by: detryo on 14-mar-2011 11:06What are you using to determine that the index is fragmented? Can you post a reproducible test case? Please see my test of what you described below, showing that the optimization does defragment the index.
SCOTT@orcl_11gR2> -- table:
SCOTT@orcl_11gR2> create table test_tab
2 (col1 varchar2 (10),
3 col2 varchar2 (10))
4 /
Table created.
SCOTT@orcl_11gR2> -- materialized view:
SCOTT@orcl_11gR2> create materialized view test_mv3
2 as
3 select to_clob (col1) || to_clob (col2) clob_col
4 from test_tab
5 /
Materialized view created.
SCOTT@orcl_11gR2> -- index with sync(on commit):
SCOTT@orcl_11gR2> create index test_idx
2 on test_mv3 (clob_col)
3 indextype is ctxsys.context
4 parameters ('sync (on commit)')
5 /
Index created.
SCOTT@orcl_11gR2> -- inserts, commits, refreshes:
SCOTT@orcl_11gR2> insert into test_tab values ('a', 'b')
2 /
1 row created.
SCOTT@orcl_11gR2> commit
2 /
Commit complete.
SCOTT@orcl_11gR2> exec dbms_mview.refresh ('TEST_MV3')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> insert into test_tab values ('c a', 'b d')
2 /
1 row created.
SCOTT@orcl_11gR2> commit
2 /
Commit complete.
SCOTT@orcl_11gR2> exec dbms_mview.refresh ('TEST_MV3')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> -- query works:
SCOTT@orcl_11gR2> select * from test_mv3
2 where contains (clob_col, 'ab') > 0
3 /
CLOB_COL
ab
c ab d
2 rows selected.
SCOTT@orcl_11gR2> -- fragmented index:
SCOTT@orcl_11gR2> column token_text format a15
SCOTT@orcl_11gR2> select token_text, token_first, token_last, token_count
2 from dr$test_idx$i
3 /
TOKEN_TEXT TOKEN_FIRST TOKEN_LAST TOKEN_COUNT
AB 1 1 1
AB 2 3 2
C 3 3 1
3 rows selected.
SCOTT@orcl_11gR2> -- optimizatino:
SCOTT@orcl_11gR2> exec ctx_ddl.optimize_index ('TEST_IDX', 'REBUILD')
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> -- defragmented index after optimization:
SCOTT@orcl_11gR2> select token_text, token_first, token_last, token_count
2 from dr$test_idx$i
3 /
TOKEN_TEXT TOKEN_FIRST TOKEN_LAST TOKEN_COUNT
AB 2 3 2
C 3 3 1
2 rows selected.
SCOTT@orcl_11gR2>
Maybe you are looking for
-
bluetooth connection between iphone and ipad no longer workers after upgrade to ver 8 - any help? I'm trying to use the iphone as a remote with keynote, which again worked before the upgrade
-
InDesign preferences not showing up
I've tried the two methods suggested in an earlier post. neither worked. When I looked at the hidden files, only found one of the two files. I found the InDesign Defaults, changed the name and restarted ID only to have an error message next to par
-
HT201448 Is there any way to Change the order of preference? Ie wiki before Xcode?
http://support.apple.com/kb/TS5239 states the order services take precedence. I would like wiki to come first. Is there a way to configure redirection?
-
Siebel 7.8 and 8.0 on Vista
Hi Gurus , A general query. Can Siebel tools and client be installed on Vista operating system. regards, Sandy
-
How do I install laser jet pro printer
I don't know how to download the software