Results 1 to 13 of 13
  1. #1
    Join Date
    Dec 2006
    Posts
    43

    Question Unanswered: Optimizing full-table-scan query

    Hi guys,

    We have a table named LOCATION which contains close to a million rows. This table is queried using queries like this:

    Code:
    select * from location where lower(description_english) = ? or lower(description_french) = ?;
    select * from location where (lower(description_english) <> ? and lower(description_french) <> ?) and (lower(description_english) like ? or lower(description_french) like ?);
    select * from location where (lower(description_english) <> ? and lower(description_french) <> ?) and (lower(description_english) like ? or lower(description_french) like ?);
    select * from location where (lower(description_english) <> ? and lower(description_french) <> ?) and (lower(description_english) not like ? and lower(description_french) not like ?) and (lower(description_english) not like ? and lower(description_french) not like ?) and (lower(description_english) like ? or lower(description_french) like ?);
    The objective is to search locations using a search string, first by exact match (in any language), then by "starts with" logic, then by "ends with" logic, and finally by "contains" logic.

    Running these 4 queries one after the other takes around 10 seconds, which is too long in my opinion. To optimize this, we've tried a few things:

    1. Installing a 1st index on description_english, then a 2nd index on description_french
    2. Installing a 1st FBI on lower(description_english), then a 2nd FBI on lower(description_french)

    This cuts maybe a second or two from the total query time, nothing dramatic.

    Do you see another way to optimize these queries?

    Thanks!

  2. #2
    Join Date
    Jun 2003
    Location
    West Palm Beach, FL
    Posts
    2,713

    Cool bit by bit

    How about trying bitmap indexes?
    The person who says it can't be done should not interrupt the person doing it. -- Chinese proverb

  3. #3
    Join Date
    Dec 2007
    Location
    Richmond, VA
    Posts
    1,328
    Provided Answers: 5
    wouldn't the user know which language they want searched? That could be passed as a variable and added to the query... AND :HV-LANGUAGE = 'E' along with the english side of the query AND :HV-LANGUAGE = 'F' for the french side. Even better for improving your performance would be to use that flag to decide which query to run either the english or the french.
    Dave Nance

  4. #4
    Join Date
    Dec 2006
    Posts
    43
    Thanks for answering, guys.

    About a bitmapped index, I thought these were useful if field cardinality was low. This isn't really the case here, as most values are distinct.

    About the user knowing in which language it wants searched, unfortunately that's a requirement. So a user with a French UI may receive locations in English.

  5. #5
    Join Date
    Dec 2006
    Posts
    43
    The bitmap index actually helped reduce query time by 35%. This is great! We're still running at around 6.5 seconds though, is there something else that could bring this down even further?

  6. #6
    Join Date
    Dec 2006
    Posts
    43
    Gathering stats for these 2 indexes brings query time down to 5-5.5 seconds. Getting there!

  7. #7
    Join Date
    Jun 2003
    Location
    Toronto, Canada
    Posts
    5,516
    Provided Answers: 1
    I think you may want to consider using text index
    ---
    "It does not work" is not a valid problem statement.

  8. #8
    Join Date
    Nov 2003
    Posts
    2,935
    Provided Answers: 12
    Quote Originally Posted by gbilodeau
    The bitmap index actually helped reduce query time by 35%. This is great!
    Beware: the bitmap index can deteriorate on a table that is frequently updated.
    It needs a rebuild at regular times (which is not the case with normal indexes in Oracle).

    Do check your performance for update/insert/delete as well. The improved SELECT performance comes with a huge price tag for changing data.

    Due to the nature of the bitmap index an update or delete can lock more than one row and that can lead to locking issues in an application that does a lot of updates.

    Usually the bitmap index should only be used for tables that are e.g. loaded once in a data warehouse or not updated frequently.

  9. #9
    Join Date
    Dec 2006
    Posts
    43
    Thanks for the heads-up. This is actually a reference table that doesn't see updates between months, so there shouldn't be any problem.

  10. #10
    Join Date
    Aug 2009
    Posts
    262
    Uses&#160;of&#160;interMedia&#160;Text&#160;
    There&#160;are&#160;countless&#160;ways&#160;in&#1 60;which&#160;interMedia&#160;Text&#160;can&#160;b e&#160;exploited&#160;in&#160;applications,&#160 ;
    including:&#160;
    • Searching&#160;for&#160;text&#160;‐&#160;You&#160; need&#160;to&#160;quickly&#160;build&#160;an&#160; application&#160;that&#160;can&#160;efficiently&#1 60;
    search&#160;textual&#160;data.&#160;&#160;
    • Managing&#160;a&#160;variety&#160;of&#160;document s&#160;‐&#160;You&#160;have&#160;to&#160;build&#16 0;an&#160;application&#160;that&#160;permits&#160;
    searching&#160;across&#160;a&#160;mix&#160;of&#160 ;document&#160;formats,&#160;including&#160;text,& #160;Microsoft&#160;Word,&#160;Lotus&#160;
    1‐2‐3,&#160;and&#160;Microsoft&#160;Excel.&#160;&# 160;
    • Indexing&#160;text&#160;from&#160;many&#160;data&# 160;sources&#160;‐&#160;You&#160;need&#160;to&#160 ;build&#160;an&#160;application&#160;that&#160;
    manages&#160;textual&#160;data&#160;not&#160;only& #160;from&#160;an&#160;Oracle&#160;database,&#160; but&#160;also&#160;from&#160;a&#160;file&#160;syst em&#160;
    as&#160;well&#160;as&#160;the&#160;Internet.&#160; &#160;
    • Building&#160;applications&#160;beyond&#160;just&# 160;text&#160;‐&#160;Beyond&#160;searching&#160;fo r&#160;words&#160;and&#160;phrases,&#160;
    you&#160;are&#160;tasked&#160;to&#160;build&#160;a &#160;knowledge&#160;base&#160;with&#160;brief&#16 0;snapshots&#160;or&#160;ʹgistsʹ&#160;about&#160;e ach&#160;
    document,&#160;or&#160;you&#160;need&#160;to&#160; classify&#160;documents&#160;based&#160;upon&#160; the&#160;concepts&#160;they&#160;discuss,&#160;
    rather&#160;than&#160;just&#160;the&#160;words&#16 0;they&#160;contain.&#160;&#160;

    • Searching&#160;XML&#160;applications&#160;‐&#160;i nterMedia&#160;Text&#160;gives&#160;the&#160;appli cation&#160;developer&#160;all&#160;
    the&#160;tools&#160;needed&#160;to&#160;build&#160 ;systems&#160;which&#160;can&#160;query&#160;not&# 160;only&#160;the&#160;content&#160;of&#160;XML&#1 60;
    documents,&#160;but&#160;also&#160;perform&#160;th ese&#160;queries&#160;confined&#160;to&#160;a&#160 ;specific&#160;structure&#160;of&#160;the&#160;
    XML&#160;document.&#160;&#160;
    And,&#160;of&#160;course,&#160;the&#160;fact&#160; that&#160;this&#160;functionality&#160;is&#160;in& #160;an&#160;Oracle&#160;database&#160;means&#160; that&#160;you&#160;can&#160;
    exploit&#160;the&#160;inherent&#160;scalability&#1 60;and&#160;security&#160;of&#160;Oracle,&#160;and &#160;apply&#160;this&#160;to&#160;your&#160;textu al&#160;data.&#160;
    Searching&#160;for&#160;Text&#160;
    There&#160;are,&#160;of&#160;course,&#160;a&#160;n umber&#160;of&#160;ways&#160;that&#160;you&#160;ca n&#160;use&#160;to&#160;search&#160;for&#160;text& #160;within&#160;the&#160;Oracle&#160;
    database,&#160;without&#160;using&#160;the&#160;in terMedia&#160;functionality.&#160;In&#160;the&#160 ;following&#160;example,&#160;we&#160;create&#160;
    a&#160;simple&#160;table,&#160;insert&#160;a&#160; couple&#160;of&#160;rows&#160;then&#160;use&#160;t he&#160;standard&#160;INSTR&#160;function&#160;and &#160;LIKE&#160;
    operator&#160;to&#160;search&#160;the&#160;text&#1 60;column&#160;in&#160;the&#160;table:&#160;&#160;
    SQL>&#160;create&#160;table&#160;mytext&#160;
    &#160;&#160;2&#160;&#160;(&#160;id&#160;&#160;&#16 0;&#160;&#160;&#160;number&#160;primary&#160;key,& #160;
    &#160;&#160;3&#160;&#160;&#160;&#160;thetext&#160; varchar2(4000)&#160;
    &#160;&#160;4&#160;&#160&#160;
    &#160;&#160;5&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    Table&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;insert&#160;into&#160;mytext&#160;
    &#160;&#160;2&#160;&#160;values(&#160;1,&#160;ʹThe &#160;headquarters&#160;of&#160;Oracle&#160;Corpor ation&#160;is&#160;ʹ&#160;||&#160;
    &#160;&#160;3&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;ʹin&#160; Redwood&#160;Shores,&#160;California.ʹ);&#160;
    &#160;&#160;&#160;&#160;&#160;
    1&#160;row&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;insert&#160;into&#160;mytext&#160;
    &#160;&#160;2&#160;&#160;values(&#160;2,&#160;ʹOra cle&#160;has&#160;many&#160;training&#160;centers& #160;around&#160;the&#160;world.ʹ);&#160;
    &#160;&#160;&#160;&#160;&#160;
    1&#160;row&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;commit;&#160;
    &#160;&#160;&#160;&#160;&#160;
    Commit&#160;complete.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;select&#160;id&#160;
    &#160;&#160;2&#160;&#160;&#160;&#160;from&#160;myt ext&#160;
    &#160;&#160;3&#160;&#160;&#160;where&#160;instr(&# 160;thetext,&#160;ʹOracleʹ)&#160;>&#160;0;&#160;
    &#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ID &#160;


    ‐‐‐‐‐‐‐‐‐‐&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;1&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;2&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;select&#160;id&#160;
    &#160;&#160;2&#160;&#160;&#160;&#160;from&#160;myt ext&#160;
    &#160;&#160;3&#160;&#160;&#160;where&#160;thetext& #160;like&#160;ʹ&#37;Oracle%ʹ;&#160;
    &#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ID &#160;
    ‐‐‐‐‐‐‐‐‐‐&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;1&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;2&#160;

    Using&#160;the&#160;SQL&#160;INSTR&#160;function,& #160;we&#160;can&#160;search&#160;for&#160;the&#16 0;occurrence&#160;of&#160;a&#160;substring&#160;wi thin&#160;
    another&#160;string.&#160;Using&#160;the&#160;LIKE &#160;operator&#160;we&#160;can&#160;also&#160;sea rch&#160;for&#160;patterns&#160;within&#160;a&#160 ;string.&#160;
    There&#160;are&#160;many&#160;times&#160;when&#160 ;the&#160;use&#160;of&#160;the&#160;INSTR&#160;fun ction&#160;or&#160;LIKE&#160;operator&#160;is&#160 ;ideal,&#160;and&#160;
    anything&#160;more&#160;would&#160;be&#160;overkil l,&#160;especially&#160;when&#160;searching&#160;a cross&#160;fairly&#160;small&#160;tables.&#160;&#1 60;
    However,&#160;these&#160;methods&#160;of&#160;loca ting&#160;text&#160;will&#160;typically&#160;resul t&#160;in&#160;a&#160;full&#160;tablescan,&#160;an d&#160;they&#160;
    tend&#160;to&#160;be&#160;very&#160;expensive&#160 ;in&#160;terms&#160;of&#160;resources.&#160;Furthe rmore,&#160;they&#160;are&#160;actually&#160;fairl y&#160;
    limited&#160;in&#160;functionality.&#160;They&#160 ;would&#160;not,&#160;for&#160;example,&#160;be&#1 60;of&#160;use&#160;if&#160;you&#160;needed&#160;t o&#160;build&#160;an&#160;
    application&#160;that&#160;answered&#160;questions &#160;such&#160;as:&#160;
    • Find&#160;all&#160;rows&#160;that&#160;contain&#16 0;ʹOracleʹ&#160;near&#160;the&#160;word&#160;ʹCorp orationʹ,&#160;and&#160;no&#160;more&#160;than&#16 0;10&#160;
    words&#160;apart.&#160;&#160;
    • Find&#160;all&#160;rows&#160;that&#160;contain&#16 0;ʹOracleʹ&#160;or&#160;ʹCaliforniaʹ,&#160;and&#16 0;rank&#160;in&#160;relevance&#160;order.&#160;&#1 60;
    • Find&#160;all&#160;rows&#160;that&#160;have&#160;t he&#160;same&#160;linguistic&#160;root&#160;as&#16 0;ʹtrainʹ&#160;(for&#160;example,&#160;trained,&#1 60;
    training,&#160;trains).&#160;&#160;
    • Perform&#160;a&#160;case‐insensitive&#160;search&# 160;across&#160;a&#160;document&#160;library.&#160 ;&#160;
    Such&#160;queries&#160;just&#160;scratch&#160;the& #160;surface&#160;of&#160;what&#160;cannot&#160;be &#160;done&#160;via&#160;traditional&#160;means,&# 160;but&#160;
    which&#160;can&#160;easily&#160;be&#160;accomplish ed&#160;through&#160;the&#160;use&#160;of&#160;int erMedia&#160;Text.&#160;In&#160;order&#160;to&#160 ;
    demonstrate&#160;how&#160;easily&#160;interMedia&# 160;can&#160;answer&#160;questions&#160;such&#160; as&#160;those&#160;posed&#160;above,&#160;we&#160 ;
    first&#160;need&#160;to&#160;create&#160;a&#160;si mple&#160;interMedia&#160;Text&#160;index&#160;on& #160;our&#160;text&#160;column:&#160;
    Note&#160;In&#160;order&#160;to&#160;use&#160;the& #160;interMedia&#160;Text&#160;PL/SQL&#160;packages,&#160;the&#160;user&#160;must&#1 60;be&#160;granted&#160;the&#160;
    role&#160;CTXAPP.&#160;&#160;
    SQL>&#160;create&#160;index&#160;mytext_idx&#160;
    &#160;&#160;2&#160;&#160;on&#160;mytext(&#160;thet ext&#160&#160;
    &#160;&#160;3&#160;&#160;indextype&#160;is&#160;CT XSYS.CONTEXT&#160;
    &#160;&#160;4&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    Index&#160;created.&#160;



    With&#160;the&#160;creation&#160;of&#160;the&#160; new&#160;index&#160;type,&#160;CTXSYS.CONTEXT,&#16 0;we&#160;have&#160;ʹText‐enabledʹ&#160;our&#160;
    existing&#160;table.&#160;We&#160;can&#160;now&#16 0;make&#160;use&#160;of&#160;the&#160;variety&#160 ;of&#160;operators&#160;that&#160;interMedia&#160; Text&#160;
    supports,&#160;for&#160;sophisticated&#160;handlin g&#160;of&#160;textual&#160;content.&#160;The&#160 ;following&#160;examples&#160;
    demonstrate&#160;the&#160;use&#160;of&#160;the&#16 0;CONTAINS&#160;query&#160;operator&#160;to&#160;a nswer&#160;three&#160;of&#160;the&#160;above&#160; four&#160;
    questions&#160;(donʹt&#160;worry&#160;about&#160;t he&#160;intricacies&#160;of&#160;the&#160;SQL&#160 ;syntax&#160;for&#160;now,&#160;as&#160;this&#160; will&#160;be&#160;
    explained&#160;a&#160;little&#160;later):&#160;&#1 60;
    SQL>&#160;select&#160;id&#160;
    &#160;&#160;2&#160;&#160;&#160;&#160;from&#160;myt ext&#160;
    &#160;&#160;3&#160;&#160;&#160;where&#160;contains (&#160;thetext,&#160;ʹnear((Oracle,Corporation),10 )ʹ)&#160;>&#160;0;&#160;
    &#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ID &#160;
    ‐‐‐‐‐‐‐‐‐‐&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;1&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;select&#160;score(1),&#160;id&#160;
    &#160;&#160;2&#160;&#160;&#160;&#160;from&#160;myt ext&#160;
    &#160;&#160;3&#160;&#160;&#160;where&#160;contains (&#160;thetext,&#160;ʹoracle&#160;or&#160;californ iaʹ,&#160;1&#160&#160;>&#160;0&#160;
    &#160;&#160;4&#160;&#160;&#160;order&#160;by&#160; score(1)&#160;desc&#160;
    &#160;&#160;5&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    &#160;&#160;SCORE(1)&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;ID&#160;
    ‐‐‐‐‐‐‐‐‐‐&#160;‐‐‐‐‐‐‐‐‐‐&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;4&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;1&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;3&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;2&#160;
    SQL>&#160;select&#160;id&#160;
    &#160;&#160;2&#160;&#160;&#160;&#160;from&#160;myt ext&#160;
    &#160;&#160;3&#160;&#160;&#160;where&#160;contains (&#160;thetext,&#160;ʹ$trainʹ)&#160;>&#160;0;&#160 ;
    &#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ID &#160;
    ‐‐‐‐‐‐‐‐‐‐&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;2&#160;

    Every&#160;bit&#160;as&#160;important&#160;as&#160 ;functionality,&#160;is&#160;the&#160;performance& #160;aspects&#160;of&#160;an&#160;interMedia&#160; Text&#160;
    index,&#160;which&#160;surpasses&#160;traditional& #160;relational&#160;methods&#160;of&#160;locating &#160;text&#160;within&#160;a&#160;column.&#160 ;
    Being&#160;truly&#160;a&#160;new&#160;index&#160;t ype&#160;within&#160;the&#160;Oracle&#160;database ,&#160;information&#160;that&#160;is&#160;maintain ed&#160;
    about&#160;the&#160;data&#160;being&#160;indexed&# 160;can&#160;be&#160;exploited&#160;during&#160;qu ery&#160;plan&#160;creation.&#160;Thus,&#160;the&# 160;
    Oracle&#160;kernel&#160;is&#160;given&#160;the&#16 0;optimal&#160;path&#160;to&#160;locating&#160;tex tual&#160;data&#160;within&#160;a&#160;column&#160 ;indexed&#160;
    by&#160;interMedia&#160;Text.&#160;

  11. #11
    Join Date
    Aug 2009
    Posts
    262
    Managing&#160;a&#160;Variety&#160;of&#160;Document s&#160;

    Beyond&#160;the&#160;ability&#160;to&#160;index&#1 60;plain&#160;text&#160;columns&#160;in&#160;a&#16 0;database,&#160;interMedia&#160;Text&#160;is&#160 ;also&#160;
    bundled&#160;with&#160;document&#160;filters&#160; for&#160;a&#160;huge&#160;variety&#160;of&#160;doc ument&#160;formats.&#160;interMedia&#160;Text&#160 ;
    will&#160;automatically&#160;filter&#160;Microsoft &#160;Word&#160;2000&#160;for&#160;Windows,&#160;M icrosoft&#160;Word&#160;98&#160;for&#160;the&#160;
    Macintosh,&#160;Lotus&#160;1‐2‐3&#160;spreadsheets ,&#160;Adobe&#160;Acrobat&#160;PDF,&#160;and&#160; even&#160;Microsoft&#160;PowerPoint&#160;
    presentation&#160;files.&#160;In&#160;total,&#160; over&#160;150&#160;document&#160;and&#160;file&#16 0;filters&#160;are&#160;bundled&#160;with&#160;int erMedia&#160;
    Text.&#160;
    Note&#160;The&#160;availability&#160;of&#160;filte rs&#160;is&#160;dependent&#160;upon&#160;the&#160; specific&#160;release&#160;of&#160;Oracle&#160;8i. &#160;For&#160;
    example,&#160;Oracle&#160;8.1.5&#160;and&#160;Orac le&#160;8.1.6&#160;were&#160;released&#160;before& #160;the&#160;introduction&#160;of&#160;
    Microsoft&#160;Word&#160;2000&#160;for&#160;Window s.&#160;Hence,&#160;there&#160;is&#160;no&#160;fil ter&#160;for&#160;this&#160;document&#160;format
    in&#160;interMedia&#160;Text&#160;8.1.5&#160;or&#1 60;8.1.6,&#160;but&#160;it&#160;is&#160;present&#1 60;in&#160;interMedia&#160;Text&#160;with&#160;Ora cle&#160;8.1.7.
    The&#160;filtering&#160;technology&#160;that&#160; is&#160;bundled&#160;with&#160;interMedia&#160;Tex t&#160;is&#160;licensed&#160;from&#160;Inso&#160 ;
    Corporation&#160;and,&#160;as&#160;far&#160;as&#16 0;accuracy&#160;and&#160;efficiency&#160;of&#160;f ilters&#160;go,&#160;I&#160;feel&#160;that&#160;th ese&#160;are&#160;the&#160;best&#160;
    on&#160;the&#160;market.&#160;The&#160;list&#160;o f&#160;current&#160;file&#160;formats&#160;support ed&#160;is&#160;documented&#160;in&#160;an&#160;ap pendix&#160;of&#160;
    the&#160;Oracle8i&#160;interMedia&#160;Text&#160;R eference.&#160;
    Note&#160;At&#160;the&#160;time&#160;of&#160;writi ng,&#160;the&#160;Inso&#160;filters&#160;were&#160 ;not&#160;available&#160;on&#160;the&#160;Linux&#1 60;platform,&#160;and&#160;
    there&#160;were&#160;no&#160;plans&#160;to&#160;ev entually&#160;make&#160;them&#160;available,&#160; which&#160;is&#160;unfortunate.&#160;This&#160;
    doesnʹt&#160;mean&#160;that&#160;interMedia&#160;T ext&#160;cannot&#160;be&#160;exploited&#160;on&#16 0;a&#160;Linux&#160;platform,&#160;but&#160;it&#16 0;
    does&#160;mean&#160;that&#160;if&#160;you&#160;are &#160;deploying&#160;Oracle&#160;8i&#160;on&#160;a &#160;Linux&#160;system,&#160;youʹll&#160;either&# 160;need&#160;
    to&#160;restrict&#160;your&#160;document&#160;type s&#160;to&#160;plain&#160;text&#160;or&#160;HTML,& #160;or&#160;youʹll&#160;have&#160;to&#160;create& #160;what&#160;
    is&#160;called&#160;a&#160;USER_FILTER&#160;object .&#160;
    Indexing&#160;Text&#160;from&#160;Many&#160;Data&# 160;Sources&#160;
    interMedia&#160;Text&#160;is&#160;not&#160;just&#1 60;about&#160;storing&#160;files&#160;inside&#160; a&#160;database.&#160;An&#160;interMedia&#160;Text &#160;
    datastore&#160;object&#160;allows&#160;you&#160;to &#160;specify&#160;exactly&#160;where&#160;your&#1 60;text/data&#160;is&#160;stored.&#160;A&#160;datastore&#1 60;
    object&#160;basically&#160;supplies&#160;informati on&#160;to&#160;the&#160;interMedia&#160;Text&#160 ;index,&#160;letting&#160;it&#160;ʹknowʹ&#160;wher e&#160;
    your&#160;data&#160;is&#160;located.&#160;This&#16 0;information&#160;can&#160;only&#160;be&#160;spec ified&#160;at&#160;index&#160;creation&#160;time.& #160;
    As&#160;we&#160;saw&#160;in&#160;an&#160;earlier&# 160;example,&#160;the&#160;data&#160;for&#160;an&# 160;interMedia&#160;Text&#160;index&#160;can&#160; come&#160;directly&#160;
    from&#160;the&#160;database,&#160;being&#160;store d&#160;internally&#160;in&#160;a&#160;column.&#160 ;This&#160;is&#160;the&#160;DIRECT_DATASTORE&#160;
    datastore&#160;object,&#160;and&#160;is&#160;the&# 160;default&#160;datastore&#160;if&#160;none&#160; is&#160;specified.&#160;The&#160;database&#160;col umn&#160;type&#160;
    can&#160;be&#160;CHAR,&#160;VARCHAR,&#160;VARCHAR2 ,&#160;BLOB,&#160;CLOB,&#160;or&#160;BFILE.&#160;A lso,&#160;please&#160;note&#160;that&#160;
    you&#160;can&#160;create&#160;an&#160;interMedia&# 160;Text&#160;index&#160;on&#160;a&#160;column&#16 0;of&#160;type&#160;LONG&#160;or&#160;LONG&#160;RA W,&#160;but&#160;
    these&#160;are&#160;deprecated&#160;datatypes&#160 ;since&#160;the&#160;release&#160;of&#160;Oracle&# 160;8&#160;and&#160;you&#160;absolutely&#160;shoul d&#160;not&#160;
    use&#160;them&#160;for&#160;any&#160;new&#160;appl ications.&#160;
    Another&#160;interesting&#160;datastore&#160;type& #160;that&#160;is&#160;based&#160;upon&#160;text&# 160;stored&#160;internally&#160;in&#160;a&#160;col umn&#160;is&#160;
    the&#160;DETAIL_DATASTORE.&#160;The&#160;master/detail&#160;relationship&#160;is&#160;very&#160;co mmon&#160;in&#160;any&#160;
    database&#160;application.&#160;Stated&#160;in&#16 0;simple&#160;terms,&#160;it&#160;describes&#160;a &#160;relationship&#160;from&#160;a&#160;single&#1 60;row&#160;
    in&#160;a&#160;master&#160;or&#160;parent&#160;tab le,&#160;to&#160;zero&#160;or&#160;more&#160;rows& #160;in&#160;a&#160;detail&#160;table,&#160;with&# 160;typically&#160;a&#160;foreign‐
    Expert one-on-one Oracle

    916
    key&#160;constraint&#160;from&#160;the&#160;detail &#160;table&#160;to&#160;the&#160;master&#160;tabl e.&#160;A&#160;purchase&#160;order&#160;is&#160;a& #160;good&#160;
    example&#160;of&#160;a&#160;master/detail&#160;relationship,&#160;with&#160;typically &#160;one&#160;row&#160;for&#160;a&#160;purchase&# 160;order&#160;itself,&#160;
    and&#160;zero&#160;or&#160;more&#160;rows&#160;in& #160;the&#160;detail&#160;table&#160;making&#160;u p&#160;the&#160;line&#160;items&#160;of&#160;the&# 160;purchase&#160;order.&#160;
    A&#160;DETAIL_DATASTORE&#160;lets&#160;the&#160;ap plication&#160;developer&#160;maintain&#160;this&# 160;logical&#160;relationship.&#160;&#160;
    Letʹs&#160;look&#160;at&#160;an&#160;example.&#160 ;Basically,&#160;we&#160;need&#160;to&#160;create& #160;a&#160;masterdetail&#160;structure&#160;that& #160;permits&#160;
    us&#160;to&#160;perform&#160;an&#160;interMedia&#1 60;Text&#160;query&#160;on&#160;a&#160;master&#160 ;table,&#160;but&#160;with&#160;the&#160;actual&#1 60;source&#160;of&#160;the&#160;
    data&#160;for&#160;the&#160;interMedia&#160;Text&# 160;being&#160;derived&#160;from&#160;a&#160;detai l&#160;table.&#160;To&#160;demonstrate,&#160;we&#1 60;first&#160;
    need&#160;to&#160;create&#160;our&#160;masterdetai l&#160;tables&#160;and&#160;load&#160;them&#160;wi th&#160;data:&#160;
    SQL>&#160;create&#160;table&#160;purchase_order&#1 60;
    &#160;&#160;2&#160;&#160;(&#160;id&#160;&#160;&#16 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;number&# 160;primary&#160;key,&#160;
    &#160;&#160;3&#160;&#160;&#160;&#160;description&# 160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 0;varchar2(100),&#160;
    &#160;&#160;4&#160;&#160;&#160;&#160;line_item_bod y&#160;&#160;&#160;&#160;&#160;&#160;char(1)&#16 0;
    &#160;&#160;5&#160;&#160&#160;
    &#160;&#160;6&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    Table&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;create&#160;table&#160;line_item&#160;
    &#160;&#160;2&#160;&#160;(&#160;po_id&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;number,&#160;
    &#160;&#160;3&#160;&#160;&#160;&#160;po_sequence&# 160;&#160;&#160;&#160;&#160;&#160;number,&#160;
    &#160;&#160;4&#160;&#160;&#160;&#160;line_item_det ail&#160;varchar2(1000)&#160;
    &#160;&#160;5&#160;&#160&#160;
    &#160;&#160;6&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    Table&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;insert&#160;into&#160;purchase_order&#16 0;(&#160;id,&#160;description&#160&#160;
    &#160;&#160;2&#160;&#160;values(&#160;1,&#160;ʹMan y&#160;Office&#160;Itemsʹ&#160&#160;
    &#160;&#160;3&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    1&#160;row&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;insert&#160;into&#160;line_item(&#160;po _id,&#160;po_sequence,&#160;line_item_detail&#160&#160;
    &#160;&#160;2&#160;&#160;values(&#160;1,&#160;1,&# 160;ʹPaperclips&#160;to&#160;be&#160;used&#160;for &#160;many&#160;reportsʹ)&#160;
    &#160;&#160;3&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    1&#160;row&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;insert&#160;into&#160;line_item(&#160;po _id,&#160;po_sequence,&#160;line_item_detail&#160&#160;
    &#160;&#160;2&#160;&#160;values(&#160;1,&#160;2,&# 160;ʹSome&#160;more&#160;Oracle&#160;letterheadʹ)& #160;
    &#160;&#160;3&#160;&#160;/&#160;Expert one-on-one Oracle

    917
    &#160;&#160;&#160;&#160;&#160;
    1&#160;row&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;insert&#160;into&#160;line_item(&#160;po _id,&#160;po_sequence,&#160;line_item_detail&#160&#160;
    &#160;&#160;2&#160;&#160;values(&#160;1,&#160;3,&# 160;ʹOptical&#160;mouseʹ)&#160;
    &#160;&#160;3&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    1&#160;row&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;commit;&#160;

    &#160;&#160;&#160;&#160;&#160;
    Commit&#160;complete.&#160;
    Note&#160;that&#160;the&#160;column&#160;LINE_ITEM _BODY&#160;is&#160;essentially&#160;a&#160;ʹdummyʹ &#160;column,&#160;as&#160;it&#160;simply&#160;
    exists&#160;so&#160;that&#160;we&#160;can&#160;cre ate&#160;the&#160;interMedia&#160;Text&#160;index& #160;on&#160;a&#160;column&#160;in&#160;the&#160;m aster&#160;table.&#160;I&#160;
    never&#160;inserted&#160;any&#160;data&#160;into&# 160;it.&#160;Now,&#160;prior&#160;to&#160;index&#1 60;creation,&#160;we&#160;need&#160;to&#160;set&#1 60;the&#160;interMedia&#160;
    Text&#160;preferences&#160;so&#160;that&#160;the&# 160;index&#160;can&#160;locate&#160;the&#160;data& #160;to&#160;be&#160;indexed:&#160;&#160;
    SQL>&#160;begin&#160;
    &#160;&#160;2&#160;&#160;&#160;ctx_ddl.create_pref erence(&#160;ʹpo_prefʹ,&#160;ʹDETAIL_DATASTOREʹ&#1 60;&#160;
    &#160;&#160;3&#160;&#160;&#160;ctx_ddl.set_attribu te(&#160;ʹpo_prefʹ,&#160;ʹdetail_tableʹ,&#160;ʹlin e_itemʹ&#160;&#160;
    &#160;&#160;4&#160;&#160;&#160;ctx_ddl.set_attribu te(&#160;ʹpo_prefʹ,&#160;ʹdetail_keyʹ,&#160;ʹpo_id ʹ&#160;&#160;
    &#160;&#160;5&#160;&#160;&#160;ctx_ddl.set_attribu te(&#160;ʹpo_prefʹ,&#160;ʹdetail_linenoʹ,&#160;ʹpo _sequenceʹ&#160;&#160;
    &#160;&#160;6&#160;&#160;&#160;ctx_ddl.set_attribu te(&#160;ʹpo_prefʹ,&#160;ʹdetail_textʹ,&#160;ʹline _item_detailʹ&#160;&#160;
    &#160;&#160;7&#160;&#160;end;&#160;
    &#160;&#160;8&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;

    PL/SQL&#160;procedure&#160;successfully&#160;complete d.&#160;
    &#160;&#160;&#160;&#160;&#160;
    First&#160;we&#160;create&#160;a&#160;user‐defined &#160;preference&#160;PO_PREF.&#160;It&#160;is&#16 0;a&#160;DETAIL_DATASTORE&#160;that&#160;will&#160 ;
    store&#160;all&#160;the&#160;information&#160;nece ssary&#160;to&#160;locate&#160;the&#160;data&#160; from&#160;the&#160;detail&#160;table.&#160;In&#160 ;subsequent&#160;
    lines,&#160;we&#160;define&#160;the&#160;name&#160 ;of&#160;the&#160;detail&#160;table,&#160;the&#160 ;key&#160;that&#160;joins&#160;to&#160;the&#160;ma ster&#160;table,&#160;how&#160;the&#160;
    rows&#160;are&#160;ordered,&#160;and&#160;finally, &#160;the&#160;column&#160;that&#160;is&#160;actua lly&#160;getting&#160;indexed.&#160;
    Now,&#160;we&#160;just&#160;create&#160;our&#160;i ndex&#160;and&#160;see&#160;it&#160;in&#160;action :&#160;
    SQL>&#160;create&#160;index&#160;po_index&#160;on& #160;purchase_order(&#160;line_item_body&#160&#160;
    &#160;&#160;2&#160;&#160;indextype&#160;is&#160;ct xsys.context&#160;
    &#160;&#160;3&#160;&#160;parameters(&#160;ʹdatasto re&#160;po_prefʹ&#160&#160;
    &#160;&#160;4&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    Index&#160;created.
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;select&#160;id&#160;
    &#160;&#160;2&#160;&#160;&#160;&#160;from&#160;pur chase_order&#160;
    &#160;&#160;3&#160;&#160;&#160;where&#160;contains (&#160;line_item_body,&#160;ʹOracleʹ&#160&#160;>&#160;0&#160;
    &#160;&#160;4&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ID &#160;
    ‐‐‐‐‐‐‐‐‐‐&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;1&#160;

    Although&#160;we&#160;created&#160;the&#160;index& #160;on&#160;LINE_ITEM_BODY,&#160;we&#160;could&#1 60;have&#160;specified&#160;the&#160;master&#160;
    table&#160;column&#160;DESCRIPTION&#160;when&#160; creating&#160;the&#160;index.&#160;However,&#160;b ear&#160;in&#160;mind&#160;that&#160;any&#160;
    changes&#160;to&#160;this&#160;column&#160;(this&# 160;is&#160;not&#160;a&#160;dummy&#160;column)&#16 0;will&#160;initiate&#160;a&#160;re‐index&#160;ope ration&#160;on&#160;
    the&#160;master&#160;row&#160;and&#160;all&#160;as sociated&#160;detail&#160;rows.&#160;
    interMedia&#160;Text&#160;also&#160;supports&#160; data&#160;sources&#160;external&#160;to&#160;the&# 160;database&#160;‐&#160;specifically,&#160;files& #160;
    external&#160;to&#160;the&#160;database&#160;as&#1 60;well&#160;as&#160;Uniform&#160;Resource&#160;Lo cators&#160;(URLs).&#160;In&#160;many&#160;work&#1 60;
    environments,&#160;files&#160;are&#160;commonly&#1 60;stored&#160;on&#160;a&#160;network‐accessible&# 160;shared&#160;file&#160;system.&#160;
    Rather&#160;than&#160;imposing&#160;the&#160;requi rement&#160;to&#160;build&#160;an&#160;application &#160;that&#160;stores&#160;all&#160;text&#160;and &#160;
    document&#160;data&#160;within&#160;the&#160;Oracl e&#160;database,&#160;the&#160;FILE_DATASTORE&#160 ;datastore&#160;object&#160;allows&#160;
    Oracle&#160;to&#160;manage&#160;the&#160;text&#160 ;index&#160;itself,&#160;and&#160;not&#160;the&#16 0;storage&#160;and&#160;security&#160;of&#160;the& #160;files.&#160;Using&#160;a&#160;
    FILE_DATASTORE,&#160;you&#160;would&#160;not&#160; store&#160;the&#160;text&#160;of&#160;the&#160;doc ument&#160;in&#160;a&#160;column.&#160;Rather,&#16 0;
    you&#160;store&#160;a&#160;file&#160;system&#160;r eference&#160;to&#160;the&#160;file,&#160;which&#1 60;must&#160;be&#160;accessible&#160;from&#160;the &#160;database&#160;
    server&#160;file&#160;system.&#160;So,&#160;even&# 160;though&#160;you&#160;might&#160;be&#160;using& #160;a&#160;Windows&#160;client,&#160;for&#160;exa mple,&#160;if&#160;
    the&#160;Oracle&#160;database&#160;was&#160;runnin g&#160;on&#160;your&#160;favorite&#160;flavor&#160 ;of&#160;UNIX,&#160;your&#160;reference&#160;to&#1 60;the&#160;file&#160;
    would&#160;follow&#160;UNIX&#160;file&#160;system& #160;syntax,&#160;as&#160;in&#160;/export/home/tkyte/MyWordDoc.doc.&#160;Note&#160;
    that&#160;this&#160;type&#160;of&#160;external&#16 0;file&#160;access&#160;is&#160;unrelated&#160;to& #160;an&#160;alternative&#160;form&#160;of&#160;ex ternal&#160;file&#160;
    access&#160;from&#160;an&#160;Oracle&#160;database &#160;using&#160;BFILEs.&#160;&#160;
    Another&#160;type&#160;of&#160;datastore&#160;exte rnal&#160;to&#160;the&#160;database&#160;is&#160;a &#160;URL_DATASTORE.&#160;This&#160;is&#160;very&# 160;
    much&#160;like&#160;a&#160;FILE_DATASTORE&#160;dat astore&#160;object,&#160;but&#160;instead&#160;of& #160;storing&#160;a&#160;file&#160;system&#160;
    reference&#160;in&#160;a&#160;column&#160;in&#160; the&#160;Oracle&#160;database,&#160;you&#160;can&# 160;store&#160;a&#160;URL.&#160;At&#160;the&#160;t ime&#160;of&#160;indexing&#160;
    a&#160;row,&#160;interMedia&#160;Text&#160;will&#1 60;actually&#160;fetch&#160;the&#160;data&#160;ove r&#160;HTTP&#160;from&#160;the&#160;database&#160; server&#160;
    itself.&#160;Again,&#160;Oracle&#160;is&#160;not&# 160;storing&#160;or&#160;managing&#160;the&#160;da ta&#160;itself.&#160;The&#160;index&#160;is&#160;c onstructed&#160;
    from&#160;the&#160;filtered&#160;contents&#160;fro m&#160;the&#160;HTTP&#160;stream,&#160;and&#160;th e&#160;actual&#160;data&#160;fetched&#160;from&#16 0;the&#160;
    URL&#160;is&#160;discarded.&#160;FTP&#160;(file&#1 60;transfer&#160;protocol)&#160;is&#160;also&#160; a&#160;valid&#160;protocol&#160;when&#160;using&#1 60;a&#160;
    URL_DATASTORE,&#160;so&#160;interMedia&#160;Text&# 160;can&#160;also&#160;index&#160;files&#160;acces sible&#160;via&#160;FTP&#160;from&#160;the&#160;
    database&#160;server.&#160;With&#160;Oracle&#160;8 .1.7&#160;and&#160;later,&#160;you&#160;can&#160;a lso&#160;embed&#160;the&#160;username&#160;and&#16 0;
    password&#160;directly&#160;in&#160;an&#160;FTP&#1 60;URL&#160;(for&#160;example,&#160;
    ftp://uidwd@ftp.bogus.com/tmp/test.doc).&#160;
    Some&#160;people&#160;actually&#160;think&#160;tha t&#160;the&#160;URL_DATASTORE&#160;is&#160;good&#1 60;for&#160;building&#160;your&#160;own&#160;
    Web‐crawling&#160;robot,&#160;but&#160;not&#160;mu ch&#160;else&#160;(by&#160;the&#160;way,&#160;it&# 160;does&#160;not&#160;have&#160;this&#160;Web‐cra wling&#160;

  12. #12
    Join Date
    Aug 2009
    Posts
    262

    Generating&#160;Themes&#160;


    Go&#160;to&#160;your&#160;favorite&#160;web&#160;s earch&#160;engine,&#160;type&#160;in&#160;a&#160;f requently&#160;occurring&#160;word&#160;on&#160;th e&#160;Internet&#160;
    like&#160;ʹdatabaseʹ,&#160;and&#160;wait&#160;for& #160;the&#160;plethora&#160;of&#160;search&#160;re sults&#160;to&#160;return.&#160;Text&#160;indexing &#160;is&#160;very&#160;
    powerful&#160;and&#160;can&#160;be&#160;used&#160; in&#160;many&#160;applications.&#160;This&#160;is& #160;particularly&#160;true&#160;when&#160;the&#16 0;domain&#160;
    of&#160;information&#160;is&#160;very&#160;large,& #160;since&#160;it&#160;becomes&#160;difficult&#16 0;for&#160;an&#160;end&#160;user&#160;to&#160;sift &#160;through&#160;all&#160;of&#160;
    the&#160;data.&#160;interMedia&#160;Text&#160;has& #160;integrated&#160;features&#160;that&#160;let&# 160;you&#160;transform&#160;all&#160;of&#160;this& #160;data&#160;into&#160;
    useful&#160;information.&#160;
    Integrated&#160;into&#160;interMedia&#160;Text&#16 0;is&#160;an&#160;extensible&#160;knowledge&#160;b ase,&#160;used&#160;during&#160;indexing&#160;
    and&#160;analysis&#160;of&#160;the&#160;text,&#160 ;which&#160;confers&#160;considerable&#160;linguis tic&#160;capabilities&#160;on&#160;this&#160;featu re.&#160;
    Not&#160;only&#160;can&#160;we&#160;search&#160;th e&#160;text,&#160;we&#160;can&#160;analyze&#160;th e&#160;meaning&#160;of&#160;text.&#160;So,&#160;at &#160;index&#160;creation&#160;
    time,&#160;we&#160;can&#160;optionally&#160;genera te&#160;themes&#160;for&#160;the&#160;interMedia&# 160;Text&#160;index&#160;itself.&#160;This&#160;al lows&#160;
    us&#160;to&#160;create&#160;applications&#160;that &#160;can,&#160;for&#160;example,&#160;analyze&#16 0;documents&#160;and&#160;classify&#160;them&#160; by&#160;
    theme,&#160;rather&#160;than&#160;by&#160;specific &#160;words&#160;or&#160;phrases.&#160;
    When&#160;theme&#160;generation&#160;was&#160;firs t&#160;available&#160;in&#160;an&#160;Oracle&#160; database,&#160;I&#160;ran&#160;a&#160;quick&#160;t est&#160;to&#160;see&#160;
    what&#160;it&#160;could&#160;do.&#160;I&#160;fed&# 160;into&#160;a&#160;table&#160;in&#160;an&#160;Or acle&#160;database&#160;over&#160;one&#160;thousan d&#160;news‐clippings&#160;
    from&#160;various&#160;computer&#160;journals.&#16 0;I&#160;created&#160;an&#160;interMedia&#160;Text &#160;index&#160;on&#160;the&#160;column&#160;that &#160;
    was&#160;used&#160;to&#160;store&#160;the&#160;act ual&#160;text&#160;of&#160;the&#160;articles,&#160 ;and&#160;then&#160;generated&#160;the&#160;themes &#160;for&#160;each&#160;
    article.&#160;I&#160;searched&#160;for&#160;all&#1 60;documents&#160;that&#160;had&#160;a&#160;theme& #160;of&#160;ʹdatabaseʹ,&#160;and&#160;the&#160;re sults&#160;
    included&#160;a&#160;news&#160;article&#160;that&# 160;did&#160;not&#160;contain&#160;a&#160;single&# 160;occurrence&#160;of&#160;the&#160;actual&#160;w ord&#160;
    ʹdatabaseʹ&#160;and&#160;yet&#160;interMedia&#160; Text&#160;generated&#160;database&#160;as&#160;a&# 160;theme.&#160;At&#160;first&#160;I&#160;thought& #160;that&#160;
    this&#160;was&#160;an&#160;error&#160;with&#160;in terMedia&#160;Text&#160;itself&#160;but&#160;after &#160;a&#160;little&#160;careful&#160;thought,&#16 0;I&#160;realized&#160;that&#160;
    this&#160;was&#160;actually&#160;a&#160;very&#160; powerful&#160;feature&#160;‐&#160;the&#160;ability &#160;to&#160;locate&#160;text&#160;in&#160;a&#160 ;database,&#160;based&#160;
    upon&#160;the&#160;meaning&#160;of&#160;the&#160;t ext.&#160;It&#160;is&#160;not&#160;statistical&#16 0;analysis,&#160;or&#160;some&#160;form&#160;of&#1 60;word‐counting,&#160;it&#160;
    truly&#160;is&#160;linguistic&#160;analysis&#160;o f&#160;the&#160;text.&#160;
    A&#160;small&#160;example&#160;illustrates&#160;th ese&#160;capabilities:&#160;&#160;
    SQL>&#160;create&#160;table&#160;mydocs&#160;
    &#160;&#160;2&#160;&#160;(&#160;id&#160;&#160;&#16 0;&#160;&#160;&#160;number&#160;primary&#160;key,& #160;
    &#160;&#160;3&#160;&#160;&#160;&#160;thetext&#160; varchar2(4000)&#160;
    &#160;&#160;4&#160;&#160&#160;
    &#160;&#160;5&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    Expert one-on-one Oracle

    921
    Table&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;create&#160;table&#160;mythemes&#160;
    &#160;&#160;2&#160;&#160;(&#160;query_id&#160;numb er,&#160;
    &#160;&#160;3&#160;&#160;&#160;&#160;theme&#160;&# 160;&#160;&#160;varchar2(2000),&#160;
    &#160;&#160;4&#160;&#160;&#160;&#160;weight&#160;& #160;&#160;number&#160;
    &#160;&#160;5&#160;&#160&#160;
    &#160;&#160;6&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    Table&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;insert&#160;into&#160;mydocs(&#160;id,&# 160;thetext&#160&#160;
    &#160;&#160;2&#160;&#160;values(&#160;1,&#160;
    &#160;&#160;3&#160;&#160;ʹGo&#160;to&#160;your&#16 0;favorite&#160;Web&#160;search&#160;engine,&#160; type&#160;in&#160;a&#160;frequently&#160;
    &#160;&#160;4&#160;&#160;occurring&#160;word&#160; on&#160;the&#160;Internet&#160;like&#160;ʹʹdatabas eʹʹ,&#160;and&#160;wait&#160;
    &#160;&#160;5&#160;&#160;for&#160;the&#160;plethor a&#160;of&#160;search&#160;results&#160;to&#160;re turn.ʹ&#160;
    &#160;&#160;6&#160;&#160&#160;
    &#160;&#160;7&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    1&#160;row&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;commit;&#160;
    &#160;&#160;&#160;&#160;&#160;
    Commit&#160;complete.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;create&#160;index&#160;my_idx&#160;on&#1 60;mydocs(thetext)&#160;indextype&#160;is&#160;ctx sys.context;&#160;
    &#160;&#160;&#160;&#160;&#160;
    Index&#160;created.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;begin&#160;
    &#160;&#160;2&#160;&#160;&#160;&#160;&#160;&#160;c tx_doc.themes(&#160;index_name&#160;=>&#160;ʹmy_id xʹ,&#160;
    &#160;&#160;3&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;textk ey&#160;&#160;&#160;&#160;=>&#160;ʹ1ʹ,&#160;
    &#160;&#160;4&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;resta b&#160;&#160;&#160;&#160;&#160;=>&#160;ʹmythemesʹ& #160;
    &#160;&#160;5&#160;&#160;&#160;&#160;&#160;&#16 0;&#160;
    &#160;&#160;6&#160;&#160;end;&#160;
    &#160;&#160;7&#160;&#160;/&#160;
    &#160;&#160;&#160;&#160;&#160;
    PL/SQL&#160;procedure&#160;successfully&#160;complete d.&#160;
    &#160;&#160;&#160;&#160;&#160;
    SQL>&#160;select&#160;theme,&#160;weight&#160;from &#160;mythemes&#160;order&#160;by&#160;weight&#160 ;desc;&#160;
    &#160;&#160;&#160;&#160;&#160;
    THEME&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;WEIGH T&#160;
    ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐&#160;‐‐‐‐ ‐‐‐‐‐‐&#160;Expert one-on-one Oracle

    922
    occurrences&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;12&#160;
    search&#160;engines&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;12&#160;
    Internet&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;11&#160;
    result&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 0;&#160;&#160;11&#160;
    returns&#160;&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;11&#160;
    databases&#160;&#160;&#160;&#160;&#160;&#160;&#160 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;1 1&#160;
    searches&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;10&#160;
    favoritism&#160;&#160;&#160;&#160;&#160;&#160;&#16 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 6&#160;
    type&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;5&#160;
    plethora&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 0;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# 160;&#160;4&#160;
    frequency&#160;&#160;&#160;&#160;&#160;&#160;&#160 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& #160;3&#160;
    words&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 ;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& #160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 60;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 ;&#160;&#160;&#160;&#160;3&#160;

    &#160;&#160;&#160;&#160;&#160;
    12&#160;rows&#160;selected.&#160;
    Our&#160;PL/SQL&#160;procedure&#160;takes&#160;the&#160;table& #160;pointed&#160;to&#160;by&#160;the&#160;index&# 160;MY_IDX,&#160;finds&#160;the&#160;row&#160;
    with&#160;key&#160;=&#160;1&#160;and&#160;retrieve s&#160;the&#160;data&#160;that&#160;is&#160;indexe d.&#160;It&#160;then&#160;runs&#160;that&#160;data &#160;through&#160;a&#160;
    thematic&#160;analyzer.&#160;This&#160;analyzer&#1 60;generates,&#160;and&#160;assigns&#160;a&#160;we ight&#160;to,&#160;all&#160;of&#160;the&#160;ʹthem esʹ&#160;of&#160;
    the&#160;document&#160;(for&#160;example,&#160;a&# 160;paper&#160;on&#160;banking&#160;might&#160;ext ract&#160;themes&#160;like&#160;ʹmoneyʹ,&#160;ʹcre ditʹ,&#160;
    and&#160;so&#160;on).&#160;It&#160;puts&#160;these &#160;themes&#160;into&#160;the&#160;results&#160; table&#160;MYTHEMES.&#160;
    Now&#160;if&#160;I&#160;did&#160;this&#160;for&#16 0;all&#160;of&#160;the&#160;data&#160;within&#160; my&#160;application,&#160;my&#160;end&#160;users&# 160;would&#160;now&#160;have&#160;
    the&#160;ability&#160;to&#160;search,&#160;not&#16 0;only&#160;for&#160;those&#160;rows&#160;which&#1 60;contained&#160;a&#160;certain&#160;word,&#160;b ut&#160;also&#160;be&#160;
    able&#160;to&#160;search&#160;for&#160;those&#160; rows&#160;which&#160;were&#160;most&#160;similar&# 160;in&#160;meaning&#160;to&#160;the&#160;text&#16 0;in&#160;a&#160;particular&#160;
    row.&#160;&#160;
    Note&#160;that&#160;with&#160;more&#160;informatio n&#160;for&#160;interMedia&#160;Text&#160;to&#160; analyze,&#160;the&#160;themes&#160;can&#160;be&#16 0;
    calculated&#160;with&#160;much&#160;greater&#160;a ccuracy&#160;than&#160;the&#160;simple&#160;senten ce&#160;shown&#160;in&#160;the&#160;example&#160;
    above.&#160;
    Also&#160;note&#160;that&#160;I&#160;created&#160; an&#160;ID&#160;column&#160;with&#160;a&#160;prima ry&#160;key&#160;constraint.&#160;In&#160;interMed ia&#160;Text&#160;in&#160;
    Oracle&#160;8i&#160;8.1.6&#160;and&#160;earlier,&# 160;the&#160;existence&#160;of&#160;a&#160;primary &#160;key&#160;was&#160;required&#160;before&#160; you&#160;could&#160;
    create&#160;an&#160;interMedia&#160;Text&#160;inde x&#160;on&#160;the&#160;same&#160;table.&#160;In&# 160;Oracle&#160;8i&#160;8.1.7&#160;and&#160;later, &#160;interMedia&#160;
    Text&#160;no&#160;longer&#160;requires&#160;the&#1 60;existence&#160;of&#160;a&#160;primary&#160;key. &#160;

  13. #13
    Join Date
    Aug 2009
    Posts
    262
    all that is an exert from Tom Kyte expert on one . for 10g /11g .

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •