Apex and Oracle Text - Sage Computing Services

Transcription

Apex and Oracle Text - Sage Computing Services
SAGE Computing Services
Customised Oracle Training Workshops and Consulting
Oracle Text in Apex
Advanced Indexing Techniques Integrated with
Application Express
Scott Wesley
Systems Consultant & Trainer
Agenda
•
•
•
•
•
•
•
•
•
Introduction
Architecture
Fundamentals
Considerations
Setting Up
Samples
Index Maintenance
Visualisation
New Features
Larry Lessig?
the law is strangling creativity
http://presentationzen.blogs.com/presentationzen/2005/10/the_lessig_meth.html
http://www.ted.com/talks/larry_lessig_says_the_law_is_strangling_creativity.html
Identity 2.0 – Dick Hardt
http://identity20.com/media/OSCON2005/
who’s the Dick on your site
Connor McDonald
http://www.oracledba.co.uk
so today’s going to be more like this
and this
after I show a few pictures
who_am_i;
http://strategy2c.wordpress.com/2009/01/10/strategy-for-goldfish-funny-illustration-by-frits/
balance
Why use Oracle Application Express?
Why use Oracle Text?
What is Oracle Text?
Document Collection
Catalogue Information
Document Classification
Architecture
Class
Description
Datastore
How are your documents stored?
Filter
How can the documents be converted to plain text?
Lexer
What language is being indexed?
Wordlist
How should stem and fuzzy queries be expanded?
Storage
How should the index data be stored?
Stop List
What words or themes are not to be indexed?
Section Group
How are documents sections defined?
1) Example
CREATE INDEX ctx_name ON my_names(name)
INDEXTYPE IS ctxsys.context
PARAMETERS ('DATASTORE CTXSYS.DEFAULT_DATASTORE');
SQL>
2
3
4
SELECT SCORE(1), name
FROM my_names
WHERE CONTAINS(name, 'fuzzy(john,,,weight)', 1) > 0
ORDER BY SCORE(1) DESC;
SCORE(1)
---------100
100
70
70
63
63
52
48
NAME
---------------------------------------John
John
Jon
Jon
Joan
Joan
Jong
Jona
8 rows selected.
2) Datastore
CTXSYS.DEFAULT_DATASTORE
BLOB
BFiles
Pointers to objects on file system
URLs
Pointers to objects on the intertube
User Defined
Why would you?
3) Index Type
a) CONTEXT
Document Collection
large document size
provides a score
asynchronous index & table data
CONTAINS
b) CTXCAT
Catalogue Information
smaller documents
text fragments
multiple attributes
set lists
similar to typical index paradigm
transactional
CATSEARCH
c) CTXRULE
Document Classification
routing information
displace manual interaction
not binary files
MATCHES
4) Considerations
location of text
document format
bypassing rows - images
character set
language
fuzzy matching & stemming
wildcard query performance
stopwords & stopthemes
query performance and storage of LOBs
mixed queries
5) Setting up
GRANT ctxapp TO ausoug;
create & delete indexing preferences
use Oracle Text PL/SQL supplied packages
1* select grantee, owner, table_name, privilege from dba_tab_privs where table_name =
'CTX_DDL'
SQL> /
GRANTEE
-------------------CTXAPP
APEX_040000
APEX_030200
AUSOUG
XDB
5 rows selected.
OWNER
-----------CTXSYS
CTXSYS
CTXSYS
CTXSYS
CTXSYS
TABLE_NAME
-----------------------------CTX_DDL
CTX_DDL
CTX_DDL
CTX_DDL
CTX_DDL
PRIVILEGE
-------------------EXECUTE
EXECUTE
EXECUTE
EXECUTE
EXECUTE
PLS-00201: identifier "string" must be declared
CTX PL/SQL Packages
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
EXECUTE
EXECUTE
EXECUTE
EXECUTE
EXECUTE
EXECUTE
EXECUTE
EXECUTE
ON
ON
ON
ON
ON
ON
ON
ON
CTXSYS.CTX_CLS TO ausoug;
CTXSYS.CTX_DDL TO ausoug;
CTXSYS.CTX_DOC TO ausoug;
CTXSYS.CTX_OUTPUT TO ausoug;
CTXSYS.CTX_QUERY TO ausoug;
CTXSYS.CTX_REPORT TO ausoug;
CTXSYS.CTX_THES TO ausoug;
CTXSYS.CTX_ULEXER TO ausoug;
Using URL Datastore in 11g
CREATE ROLE apex_url_datastore_role;
GRANT apex_url_datastore_role TO APEX_040000
WITH ADMIN OPTION;
GRANT apex_url_datastore_role TO ausoug;
EXEC
ctxsys.ctx_adm.set_parameter
('file_access_role'
,'APEX_URL_DATASTORE_ROLE');
Demonstrations
Script
Description
Ctx_blobs.sql
Import & index a range of documents
Ctx_bfiles.sql
Import & index BFILE pointers
Ctx_urls.sql
Index & search URL references
Ctx_dict.sql
Index & search English dictionary words
Ctx_views.sql
Index view SQL text for impact analysis
Ctx_apex_files.sql
Duplicate and search Apex file repository
Ctx_apex_backups.sql
Hunt through your (automated) Apex app backups
Ctx_names.sql
Basic name filter options
Ctx_products.sql
Multiple column searches
Ctx_category.sql
Attribute based searching
Ctx_classify.sql
Classify documents into categories
6) Index maintenance
indexing errors
resume failed index
ALTER INDEX ctx_surname
REBUILD PARAMETERS ('resume memory 10m');
recreate index online (11g)
EXEC ctx_ddl.recreate_index_online
('ctx_surname', 'replace lexer sw_lexer');
rebuilding an index
ALTER INDEX ctx_surname
REBUILD PARAMETERS('replace lexer sw_lexer')
ONLINE;
ctx_report.index_stats
create table ausoug.my_stats (stats clob);
declare
x clob := null;
begin
for r_rec in
(select *
from ctxsys.ctx_indexes
where idx_owner = 'AUSOUG'
and
idx_type = 'CONTEXT') loop
ctx_report.index_stats(r_rec.idx_name,x);
insert into ausoug.my_stats values (x);
end loop;
commit;
dbms_lob.freetemporary(x);
end;
/
7) Data Dictionary
SQL> select count(*)
2 from all_views
3 where owner = 'CTXSYS';
COUNT(*)
---------58
8) Common Questions
DML operations on a CONTEXT index
ctxsys.ctx_user_pending
synchronise the index
synchronize
EXEC ctx_ddl.sync_index('ctx_surname');
dbms_job
dbms_scheduler
how often?
optimise the index
can get fragmented
inverted index
each entry contains list of documents
DOG
DOG
DOG
DOG
-
DOC1 DOC3 DOC5
DOC7
DOC9
DOC11
ctx_ddl.optimize_index
capacity planning?
Object of Interest
Num
Rows
Table
Size
Index
size
150k
7
27
28
34
1.5
Names
27k
1
6
Views
2k
7
2
Dictionary
Documents
BFiles
4
Product
1
URL
1
more text
cleaner data
less overhead
document format
next steps?
read Application Developer’s Guide
find examples
experiment
SAGE Computing Services
Customised Oracle Training Workshops and Consulting
Question time
Presentations are available from our website:
http://www.sagecomputing.com.au
enquiries@sagecomputing.com.au
scott.wesley@sagecomputing.com.au
http://triangle-circle-square.blogspot.com