diff --git a/text/full-text-indexing/create-indexes/create-indexes.md b/text/full-text-indexing/create-indexes/create-indexes.md new file mode 100644 index 000000000..3980aaa71 --- /dev/null +++ b/text/full-text-indexing/create-indexes/create-indexes.md @@ -0,0 +1,221 @@ +# Creating an Oracle Text index + +## Introduction + +This lab will use the SQL Workshop in Database Actions from the Autonomous Transaction Processing page. It will create a simple Oracle table with a textual column in it, and create an Oracle Text index on that table. + +We will then briefly explore information about the index before moving on to queries in the next lab. + +Estimated Time: 10 minutes + +### Objectives + +In this lab, you will: + +* Create and populate a table with a textual column +* Create a text index on that table +* Examine the created index + +### Prerequisites + +* Be logged into your Oracle Cloud Account + +## Task 1: Open Database Actions + +1. Login to the Oracle Cloud. + + + +2. If you are using a Free Trial or Always Free account, and you want to use Always Free Resources, you need to be in a region where Always Free Resources are available. You can see your current default **Region** in the top, right hand corner of the page. + + ![Select region on the far upper-right corner of the page.](./images/region.png " ") + + + + +2. If you are using a LiveLabs account, you need to be in the region your account was provisioned in. You can see your current default **Region** in the top, right hand corner of the page. Make sure that it matches the region on the LiveLabs Launch page. + + ![Select region on the far upper-right corner of the page.](./images/region.png " ") + + + +3. Click the navigation menu in the upper left to show top level navigation choices. + +4. Click on **Oracle Database** and choose **Autonomous Transaction Processing**. + + + ![Click Autonomous Transaction Processing](./images/adb-atp.png " ") + +5. Use the __List Scope__ drop-down menu on the left to select the same compartment where you created your Autonomous Databae in Lab 1. Make sure your workload type is __Transaction Processing__. Enter the first part of your user name, for example `LL185` in the Search Compartments field to quickly locate your compartment. + + ![Check the workload type on the left.](./images/livelabs-compartment.png " ") + + + + ![Check the workload type on the left.](./images/compartments.png " ") + + ![check workload type](./images/workload-type.png " ") + + + **Note:** Avoid the use of the ManagedCompartmentforPaaS compartment as this is an Oracle default used for Oracle Platform Services. + + +6. You should see your database **TEXTDB** listed in the center. Click on the database name "TEXTDB". + + ![database name](./images/database-name.png " ") + +7. On the database page, choose __Database Actions__. + + ![dbactions button](./images/dbactions-button.png " ") + +8. You are now in Database Actions. + + Database Actions allows you to connect to your Autonomous Database through various browser-based tools. We will just be using the SQL workshop tool. + +## Task 2: Create and populate a simple table + +1. You should be in the Database Actions panel. Click on the **SQL** card + + ![dbactions menu sql](./images/dbactions-menu-sql.png " ") + + When you first enter SQL, you will get a tour of the features. We recommend you step through it, but you can skip the tour by clicking on the "X". The tour is available at any time by clicking the tour button. + + ![sql tour](./images/sql-tour.png " ") + + +2. We will create a simple table to keep mock user sales records. It contains a numeric column for record ID, a varchar column for customer name, another numeric column for sales amount, and another varchar column for note. Copy the following into the 'Worksheet' area and press the "Run Statement" button: + + ``` + + create table user_data + (id number, + name varchar2(100), + amount number(17,2), + note varchar2(2000) + ) + + ``` + + ![create table](./images/create-table.png " ") + + You should see a message "Table USER_DATA created". On the left side of the screen, click the "Refresh" button to see your new table in the table list. + + ![create table result](./images/create-table-result.png " ") + +3. Populate the table with a few rows. + + Copy the following SQL into the worksheet area. Make sure you *highlight the whole statement* with your mouse, and press the "Run Statement" button: + + ``` + + insert into user_data + select 1, 'John Smith', 123.45, 'First order from John Smith.' from dual + union + select 2, 'Mary Poppins', 67.89, 'First ever order from Marie Poppins.' from dual + union + select 3, 'John Smith', 99.45, 'Second order from Johnny Smith.' from dual + + ``` + + ![inserts](./images/inserts.png " ") + + **Note:** You should see "3 rows inserted" at the bottom. If you just see the values listed, you didn't highlight the statement, and SQL workshop only run the SELECTs rather than the INSERT. You can try again. + +4. Check that we have rows in the table + + Copy the following simple SELECT into the worksheet area and press "Run Statement". + + ``` + + select * from user_data + + ``` + + You should see the rows you inserted. You can expand the view to see the whole text column by adjusting the column header. + + If there are no rows shown, return to Step 3. + + ![select star](./images/select-star.png " ") + +## Task 3: Create a Text Index + +Text indexes are an example of a **domain index**. Domain indexes are specialized indexes for particular types of data (or 'domains'). To tell the kernel what type of index to create, we use the special syntax "INDEXTYPE IS ...". The most common type of text index, and what we shall use here, is a CONTEXT indextype. + +1. Copy, and run, the following SQL which will create an index on the TEXT column of our table. + + ``` + + create index myindex on user_data(note) indextype is ctxsys.context + + ``` + + You should see "Index MYINDEX created" in the message area. + +2. Examine database views for the index + + Copy and run the following query: + + ``` + + select index_name, index_type, status from user_indexes + where index_name = 'MYINDEX' + + ``` + + ![user indexes view](./images/user_indexes.png) + + So there is your index, with an index_type of 'DOMAIN' and a status of 'VALID'. A Text index must be VALID for you to use it. An index being created on a large table may show as INPROGRS, meaning index creation is in progress, and it's not yet ready to use. + + We can also look in the "Text Data Dictionary". That's a set of views owned by the user CTXSYS, and is specifically for Oracle Text indexes. The views are all prefixed 'CTX_' and are viewable by all users. Run the following: + + ``` + + select idx_name, idx_table, idx_text_name from ctx_user_indexes + + ``` + + ![ctx_user_indexes view](./images/ctx_user_indexes.png) + + That tells us that our index MYINDEX is created on table USER_DATA, column NOTE. + +3. Look at the underlying tables created. + + Text indexes are implemented as a set of underlying tables. These usually have the form DR$<indexname>$<suffix>, where the suffix indicates the particular type of table. There's normally no need to know what is in these indexes, but one in particular (the "dollar I" table) is interesting. + + Refresh the list of tables on the left side of the screen. + + ![table list](./images/table-list.png " ") + + You should see several tables listed. Open the table definition for DR$MYINDEX$I by clicking on the triangle next to it. + + We see a list of columns. The main one we're interested in is TOKEN_TEXT. + + We discussed earlier how Oracle Text uses "word based" indexes. To be more accurate, it uses "token-based" indexes, because a token is not necessarily a word (though it usually is). The "$I" table contains a list of all the indexed tokens, and we can view them with the following query: + + ``` + + select token_text from dr$myindex$i + + ``` + + ![List of indexed tokens](./images/token-list.png " ") + + You may want to expand the output window upwards so you can see the full list of indexed words. + + Notice anything about the list? Not all the words in the text appear - "from" is missing. That's because it is designated "stop word" - common words that are not very useful in searches, but are likely to take a lot of space + in the index. By default, we don't index them - though using advanced options we can tell the system to index all words, + or provide a "custom stoplist" of words we don't want indexed. The default list of stopwords will vary with language and + will depend on the default language setting for the database (always English for Autonomous Database). + You can customize your stop word list following the examples here: [Create Stop List](https://docs.oracle.com/en/database/oracle/oracle-database/19/ccref/CTX_DDL-package.html#GUID-3336B8E9-13FB-4997-A9AD-8D9A207B10C4) and [Add Stop Word] (https://docs.oracle.com/en/database/oracle/oracle-database/19/ccref/CTX_DDL-package.html#GUID-5D27665E-8ECC-4703-94CC-83387BB7ABCD). + + We don't need to know anything about the underlying index tables at the moment. But it's useful to see the words that are indexed, + and it can sometimes be worth refering to this list when trying to figure out why a particular query acts as it does (queries + are covered in the next lab). + +You may now continue to the next lab. + +## Acknowledgements + +- **Author** - Roger Ford, Principal Product Manager +- **Contributors** - Alexandra Czarlinska, James Zheng +- **Last Updated By/Date** - Roger Ford, March 2022 diff --git a/text/full-text-indexing/create-indexes/images/adb-atp.png b/text/full-text-indexing/create-indexes/images/adb-atp.png new file mode 100644 index 000000000..a88848c97 Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/adb-atp.png differ diff --git a/text/full-text-indexing/create-indexes/images/compartments.png b/text/full-text-indexing/create-indexes/images/compartments.png new file mode 100644 index 000000000..6a5eb317c Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/compartments.png differ diff --git a/text/full-text-indexing/create-indexes/images/create-table-result.png b/text/full-text-indexing/create-indexes/images/create-table-result.png new file mode 100644 index 000000000..289a2ad1d Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/create-table-result.png differ diff --git a/text/full-text-indexing/create-indexes/images/create-table.png b/text/full-text-indexing/create-indexes/images/create-table.png new file mode 100644 index 000000000..2b22fcd7f Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/create-table.png differ diff --git a/text/full-text-indexing/create-indexes/images/ctx-user-indexes.png b/text/full-text-indexing/create-indexes/images/ctx-user-indexes.png new file mode 100644 index 000000000..a7a7e76ad Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/ctx-user-indexes.png differ diff --git a/text/full-text-indexing/create-indexes/images/ctx_user_indexes.png b/text/full-text-indexing/create-indexes/images/ctx_user_indexes.png new file mode 100644 index 000000000..ab02729ca Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/ctx_user_indexes.png differ diff --git a/text/full-text-indexing/create-indexes/images/database-name.png b/text/full-text-indexing/create-indexes/images/database-name.png new file mode 100644 index 000000000..d29164ed9 Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/database-name.png differ diff --git a/text/full-text-indexing/create-indexes/images/dbactions-button.png b/text/full-text-indexing/create-indexes/images/dbactions-button.png new file mode 100644 index 000000000..b35ee7947 Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/dbactions-button.png differ diff --git a/text/full-text-indexing/create-indexes/images/dbactions-menu-sql.png b/text/full-text-indexing/create-indexes/images/dbactions-menu-sql.png new file mode 100644 index 000000000..eaa304fe1 Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/dbactions-menu-sql.png differ diff --git a/text/full-text-indexing/create-indexes/images/inserts.png b/text/full-text-indexing/create-indexes/images/inserts.png new file mode 100644 index 000000000..57f088def Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/inserts.png differ diff --git a/text/full-text-indexing/create-indexes/images/livelabs-compartment.png b/text/full-text-indexing/create-indexes/images/livelabs-compartment.png new file mode 100644 index 000000000..89cf297d0 Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/livelabs-compartment.png differ diff --git a/text/full-text-indexing/create-indexes/images/region.png b/text/full-text-indexing/create-indexes/images/region.png new file mode 100644 index 000000000..be0c5c399 Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/region.png differ diff --git a/text/full-text-indexing/create-indexes/images/select-star.png b/text/full-text-indexing/create-indexes/images/select-star.png new file mode 100644 index 000000000..fd6215d17 Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/select-star.png differ diff --git a/text/full-text-indexing/create-indexes/images/sql-tour.png b/text/full-text-indexing/create-indexes/images/sql-tour.png new file mode 100644 index 000000000..0fac73091 Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/sql-tour.png differ diff --git a/text/full-text-indexing/create-indexes/images/table-list.png b/text/full-text-indexing/create-indexes/images/table-list.png new file mode 100644 index 000000000..a0b945b4c Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/table-list.png differ diff --git a/text/full-text-indexing/create-indexes/images/token-list.png b/text/full-text-indexing/create-indexes/images/token-list.png new file mode 100644 index 000000000..e7257a59a Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/token-list.png differ diff --git a/text/full-text-indexing/create-indexes/images/user-indexes.png b/text/full-text-indexing/create-indexes/images/user-indexes.png new file mode 100644 index 000000000..1acca5a94 Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/user-indexes.png differ diff --git a/text/full-text-indexing/create-indexes/images/user_indexes.png b/text/full-text-indexing/create-indexes/images/user_indexes.png new file mode 100644 index 000000000..5369e935d Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/user_indexes.png differ diff --git a/text/full-text-indexing/create-indexes/images/workload-type.png b/text/full-text-indexing/create-indexes/images/workload-type.png new file mode 100644 index 000000000..fc036548c Binary files /dev/null and b/text/full-text-indexing/create-indexes/images/workload-type.png differ diff --git a/text/full-text-indexing/introduction/introduction.md b/text/full-text-indexing/introduction/introduction.md new file mode 100644 index 000000000..be83e8573 --- /dev/null +++ b/text/full-text-indexing/introduction/introduction.md @@ -0,0 +1,44 @@ +# Introduction + +## About this Workshop + +Oracle Text allows you to do fast, full-text searching in Oracle Database. + +While superficially it is similar to an indexed version of the LIKE operator, there are many differences. + +Oracle Text creates **word-based** indexes on textual content in the database. That content can range from a few words in a VARCHAR2 column to multi-chapter PDF documents stored in a BLOB column (or even externally on a file system or at a URL or on Cloud storage). + +Oracle Text is a standard feature of all versions of Oracle Database, on cloud, on premise, and all variations from XE to Enterprise Edition. + +This workshop is an introduction to Oracle Text indexes, and is designed to walk you through the basics of creating a text index, performing text queries, and maintaining text indexes. You can run the steps listed here in an on-premise database but the workshop assumes you are are running in a cloud environment. + +Later workshops will explore the more advanced capabilities of the Oracle Text. + +## Workshop Scenario + +We're going to create a simple table called "user_data" with customer information. That includes a number column for record ID, a VARCHAR2 column for customer name, a number column for order amount and a VARCHAR2 column for note that sales rep took. + +We'll populate that table, then create a Text index on note column. + +We'll then work through various types of queries using the Oracle Text CONTAINS operator. We'll also show some mixed queries with full text search on note column with additional constraint on other relational columns. + +Finally, we'll look at how to SYNC and OPTIMIZE Oracle Text indexes. + +## Prerequisites + +Oracle Text is a SQL-level toolkit. This workshop assumes you have: + +* Some familiarity with basic SQL concepts +* An Oracle Cloud account + +You may now proceed to the next lab. + +## Learn More + +* [Oracle Text Homepage](https://www-sites.oracle.com/database/technologies/appdev/oracletext.html) + +## Acknowledgements + +* **Author** - Roger Ford, Principal Product Manager +- **Contributors** - James Zheng +* **Last Updated By/Date** - Roger Ford, March 2022 diff --git a/text/full-text-indexing/maintenance/images/after-optimize.png b/text/full-text-indexing/maintenance/images/after-optimize.png new file mode 100644 index 000000000..c9cf4161a Binary files /dev/null and b/text/full-text-indexing/maintenance/images/after-optimize.png differ diff --git a/text/full-text-indexing/maintenance/images/after-sync.png b/text/full-text-indexing/maintenance/images/after-sync.png new file mode 100644 index 000000000..d8020a91f Binary files /dev/null and b/text/full-text-indexing/maintenance/images/after-sync.png differ diff --git a/text/full-text-indexing/maintenance/images/before-optimize.png b/text/full-text-indexing/maintenance/images/before-optimize.png new file mode 100644 index 000000000..dd3db9f70 Binary files /dev/null and b/text/full-text-indexing/maintenance/images/before-optimize.png differ diff --git a/text/full-text-indexing/maintenance/images/search-nosync.png b/text/full-text-indexing/maintenance/images/search-nosync.png new file mode 100644 index 000000000..1d88b7904 Binary files /dev/null and b/text/full-text-indexing/maintenance/images/search-nosync.png differ diff --git a/text/full-text-indexing/maintenance/images/search-paul.png b/text/full-text-indexing/maintenance/images/search-paul.png new file mode 100644 index 000000000..b2669e5bd Binary files /dev/null and b/text/full-text-indexing/maintenance/images/search-paul.png differ diff --git a/text/full-text-indexing/maintenance/images/search-williams.png b/text/full-text-indexing/maintenance/images/search-williams.png new file mode 100644 index 000000000..f546430ae Binary files /dev/null and b/text/full-text-indexing/maintenance/images/search-williams.png differ diff --git a/text/full-text-indexing/maintenance/maintenance.md b/text/full-text-indexing/maintenance/maintenance.md new file mode 100644 index 000000000..c460bbef0 --- /dev/null +++ b/text/full-text-indexing/maintenance/maintenance.md @@ -0,0 +1,188 @@ +# Index Maintenance + +## Introduction + +So far we've seen how to create and query an Oracle Text index. That's the basics of Oracle Text, but we need to cover a couple of topics under index maintenance. + +Oracle Text indexes are not, by default transactional. After changes to the indexed table, the index must be **synchronized** before the new data can be found by a search. + +After many changes to an Oracle Text index, it will perform less than ideally, because of fragmentation of the index and garbage (deleted) data accumulating in the index. To get the index to it's best state, we must **optimize** it. + +Estimated Time: 20 minutes + +### Objectives + +In this lab, you will: + +* See that indexes are not updated automatically +* Learn how to synchronize an index, either manually or automatically +* See that indexes get fragmented over time +* Learn how to optimize the index + +### Prerequisites + +* Be logged into your Oracle Cloud Account +* Have completed at least Lab 2, Creating Indexes + +## Task 1: Open Database Actions + +We'll assume you're already in Database Actions having just completed the previous lab. If not, then follow Task 1 in Lab 3: Queries. + +## Task 2: Synchronization + +1. Let's insert a new row into USER_DATA. Copy the following a click on the "Run Statement" button: + + ``` + + insert into user_data values (4, 'Mike Smith', 98.76, 'Third one from Mike Smith.') + + ``` + + Now try a query for the data you just inserted: + + ``` + + select * from user_data + where contains ( note, 'mike' ) > 0 + + ``` + ![search without sync - no results](./images/search-nosync.png " ") + + When you run that you will get no results. Remember CONTAINS *only* works with a CONTEXT index. And if that index isn't up-to-date, neither will the results be. To get the right results, we must __SYNC__hronize the index. The basic way to do this is to call a PL/SQL procedure __CTX\_DDL.SYNC\_INDEX__ (your user will need to have CTXAPP role to access that, or have been explicitly granted __EXECUTE ON CTXSYS.CTX\_DDL__). The index name is passed in as a parameter to the procedure. + + 2. Sychronize the index. Run this: + + ``` + + execute ctx_ddl.sync_index ('myindex') + + ``` + + Now try the previous query for 'mike' again and it will work. + + ![after sync query works](./images/after-sync.png " ") + +## Task 3: Automatic SYNC on commit + +Running __SYNC\_INDEX__ manually is efficient, and gives you full control. However, you can have the index synchronize automatically, either by specifying that it should be synchronized on commit, or by specifying a regular time period (such as every minute) to perform the synchronization. + +1. Drop the current index first: + + ``` + + drop index myindex + + ``` + +2. Whenever non-default index behavior is required, we use a PARAMETERS clause with the index. Here we're going to specify __SYNC(ON COMMIT)__ to have it sync automatically at COMMIT time: + + ``` + + create index myindex on user_data(note) indextype is ctxsys.context + parameters ('sync (on commit)') + + ``` + +3. Now we'll add a new row to the table, and search for it: + + ``` + + insert into user_data values (5, 'Peter Williams', 110.68, 'Canceled order from Peter Williams.' ) + + ``` + + The SQL Workshop in Autonomous Database commits automatically, so our insert should be immediately available. Run a and we will find the new row without having to call __CTX\_DDL.SYNC\_INDEX__. + + ``` + + select * from user_data + where contains ( note, 'williams' ) > 0 + + ``` + + ![search for rabbit succeeds](./images/search-williams.png " ") + +## Task 4: Automatic SYNC at time intervals + +SYNC(ON COMMIT) is convenient, but not ideal in high transaction-rate situations. It can lead to transactions getting delayed as they wait for the previous SYNC to complete. Instead, you can choose to have SYNC performed at a specific time period. + +The longer that time period is (five minutes is often chosen) the less your index will need to be optimized. However, if you need near-real-time syncs, you can choose a period as low as one second. + +Time interval SYNCs use database scheduler, so in 19c and before you must have __CREATE JOB__ privilege to use it. + +1. Drop the existing index: + + ``` + + drop index myindex + + ``` + +2. Now create the index again, but this time specify that it should be SYNC'd every minute. The syntax for the time period comes from DBMS\_SCHEDULER. + + ``` + + create index myindex on user_data(note) indextype is ctxsys.context + parameters ('sync (every "freq=minutely; interval=1")') + + ``` + +3. Now insert a new row + + ``` + + insert into user_data values (6, 'Paul Williams', 77.36, 'Returned order from Paul Williams.' ) + + ``` + +4. Search for the new row. Initially you'll probably find that it doesn't find the new row, but keep repeating the query and it will work + within one minute. + + ``` + + select * from user_data + where contains (note, 'paul') > 0; + + ``` + ![search for white](./images/search-paul.png " ") + +## Task 5: Optimization + +1. Examine the "dollar I" table. + + Now we've done an update to the index, let's take another look at the list of indexed words in the $I table. Run the following: + + ``` + + select token_text from dr$myindex$i + + ``` + + You should see that there are now two entries for the word 'smith'. We won't worry about exactly why, but let's just say it's an example of index fragmentation. + + +2. Optimize the index + + We can optimize the index using another PL/SQL command in the ctx_ddl package: ctx\_ddl.optimize\_index. That takes two mandatory parameters, the name of the index and the type of optimization to perform. Common values are 'FULL' or 'REBUILD'. We'll go with 'FULL': + + ![](./images/before-optimize.png " ") + + ``` + + execute ctx_ddl.optimize_index('myindex', 'FULL') + + ``` + + Now try the previous select from the $I table again. There is now only one entry for 'smith' - the index information for that word has been condensed into a single row. + + ![](./images/after-optimize.png " ") + +You should now have a good grounding in creating Oracle Text indexes, running basic queries against those indexes, and maintaining those indexes. + +There is much more to Oracle Text than we were able to cover here, so look out for an advanced Oracle Text LiveLab coming soon. + +## Acknowledgements + +- **Author** - Roger Ford, Principal Product Manager +- **Contributors** - Kamryn Vinson, Andres Quintana, James Zheng +- **Last Updated By/Date** - Roger Ford, March 2022 diff --git a/text/full-text-indexing/provision/images/adb-info-livelabs.png b/text/full-text-indexing/provision/images/adb-info-livelabs.png new file mode 100644 index 000000000..4beb97bbd Binary files /dev/null and b/text/full-text-indexing/provision/images/adb-info-livelabs.png differ diff --git a/text/full-text-indexing/provision/images/adb-info.png b/text/full-text-indexing/provision/images/adb-info.png new file mode 100644 index 000000000..ab236b4a5 Binary files /dev/null and b/text/full-text-indexing/provision/images/adb-info.png differ diff --git a/text/full-text-indexing/provision/images/adb-json.png b/text/full-text-indexing/provision/images/adb-json.png new file mode 100644 index 000000000..cfaea3431 Binary files /dev/null and b/text/full-text-indexing/provision/images/adb-json.png differ diff --git a/text/full-text-indexing/provision/images/administration.png b/text/full-text-indexing/provision/images/administration.png new file mode 100644 index 000000000..f31b29433 Binary files /dev/null and b/text/full-text-indexing/provision/images/administration.png differ diff --git a/text/full-text-indexing/provision/images/atp.png b/text/full-text-indexing/provision/images/atp.png new file mode 100644 index 000000000..07bf41568 Binary files /dev/null and b/text/full-text-indexing/provision/images/atp.png differ diff --git a/text/full-text-indexing/provision/images/autonomous-json-db.png b/text/full-text-indexing/provision/images/autonomous-json-db.png new file mode 100644 index 000000000..2fa7ffc74 Binary files /dev/null and b/text/full-text-indexing/provision/images/autonomous-json-db.png differ diff --git a/text/full-text-indexing/provision/images/compartments.png b/text/full-text-indexing/provision/images/compartments.png new file mode 100644 index 000000000..6a5eb317c Binary files /dev/null and b/text/full-text-indexing/provision/images/compartments.png differ diff --git a/text/full-text-indexing/provision/images/configuration.png b/text/full-text-indexing/provision/images/configuration.png new file mode 100644 index 000000000..ece4a1432 Binary files /dev/null and b/text/full-text-indexing/provision/images/configuration.png differ diff --git a/text/full-text-indexing/provision/images/create-adb-final.png b/text/full-text-indexing/provision/images/create-adb-final.png new file mode 100644 index 000000000..8fac9ab56 Binary files /dev/null and b/text/full-text-indexing/provision/images/create-adb-final.png differ diff --git a/text/full-text-indexing/provision/images/create-adb.png b/text/full-text-indexing/provision/images/create-adb.png new file mode 100644 index 000000000..55e9fa530 Binary files /dev/null and b/text/full-text-indexing/provision/images/create-adb.png differ diff --git a/text/full-text-indexing/provision/images/db-actions.png b/text/full-text-indexing/provision/images/db-actions.png new file mode 100644 index 000000000..70af3ae38 Binary files /dev/null and b/text/full-text-indexing/provision/images/db-actions.png differ diff --git a/text/full-text-indexing/provision/images/deployment-type.png b/text/full-text-indexing/provision/images/deployment-type.png new file mode 100644 index 000000000..d72d302a1 Binary files /dev/null and b/text/full-text-indexing/provision/images/deployment-type.png differ diff --git a/text/full-text-indexing/provision/images/license-type.png b/text/full-text-indexing/provision/images/license-type.png new file mode 100644 index 000000000..120cd3948 Binary files /dev/null and b/text/full-text-indexing/provision/images/license-type.png differ diff --git a/text/full-text-indexing/provision/images/livelabs-compartment.png b/text/full-text-indexing/provision/images/livelabs-compartment.png new file mode 100644 index 000000000..89cf297d0 Binary files /dev/null and b/text/full-text-indexing/provision/images/livelabs-compartment.png differ diff --git a/text/full-text-indexing/provision/images/navigation.png b/text/full-text-indexing/provision/images/navigation.png new file mode 100644 index 000000000..0434becf2 Binary files /dev/null and b/text/full-text-indexing/provision/images/navigation.png differ diff --git a/text/full-text-indexing/provision/images/network-access.png b/text/full-text-indexing/provision/images/network-access.png new file mode 100644 index 000000000..7b3ed0783 Binary files /dev/null and b/text/full-text-indexing/provision/images/network-access.png differ diff --git a/text/full-text-indexing/provision/images/provisioning.png b/text/full-text-indexing/provision/images/provisioning.png new file mode 100644 index 000000000..63edf4f22 Binary files /dev/null and b/text/full-text-indexing/provision/images/provisioning.png differ diff --git a/text/full-text-indexing/provision/provision.md b/text/full-text-indexing/provision/provision.md new file mode 100644 index 000000000..b59cca213 --- /dev/null +++ b/text/full-text-indexing/provision/provision.md @@ -0,0 +1,165 @@ +# Provisioning an Autonomous Database + +## Introduction + +This lab walks you through the steps to provision at Autonomous Database on Oracle Cloud. In this lab, you will provision a new Autonomous Transaction processing instance. + +Estimated Time: 10 minutes + +### Objectives + +In this lab, you will: + +* Learn how to provision a new Autonomous Database + +### Prerequisites + +* Logged into your Oracle Cloud Account + +## Task 1: Choose Autonomous Transaction Processing from the Services Menu + +1. Login to the Oracle Cloud. + + + +2. If you are using a Free Trial or Always Free account, and you want to use Always Free Resources, you need to be in a region where Always Free Resources are available. You can see your current default **Region** in the top, right hand corner of the page. + + ![Select region on the far upper-right corner of the page.](./images/region.png " ") + + + + +2. If you are using a LiveLabs account, you need to be in the region your account was provisioned in. You can see your current default **Region** in the top, right hand corner of the page. Make sure that it matches the region on the LiveLabs Launch page. + + ![Select region on the far upper-right corner of the page.](./images/region.png " ") + + + +3. Click the navigation menu in the upper left to show top level navigation choices. + + ![Oracle home page.](./images/navigation.png " ") + +4. Click on **Oracle Database** and choose **Autonomous Transaction Processing**. + + ![Click Autonomous JSON Database](./images/atp.png " ") + +5. Use the __List Scope__ drop-down menu on the left to select a compartment. Make sure your workload type is __Transaction Processing__. Enter the first part of your user name, for example `LL185` in the Search Compartments field to quickly locate your compartment. + + ![Check the workload type on the left.](images/livelabs-compartment.png " ") + + + + ![Check the workload type on the left.](./images/compartments.png " ") + + ![Check the workload type om the left](./images/workload-type.png " ") + + + > **Note:** Avoid the use of the ManagedCompartmentforPaaS compartment as this is an Oracle default used for Oracle Platform Services. + + +## Task 2: Create the ATP Instance + +1. Click **Create Autonomous Database** to start the instance creation process. + + ![Click Create Autonomous Database.](./images/create-adb.png " ") + +2. This brings up the __Create Autonomous Database__ screen where you will specify the configuration of the instance. + +3. Provide basic information for the autonomous database: + + + - __Choose a compartment__ - Select a compartment for the database from the drop-down list. + + + - __Choose a compartment__ - Use the default compartment that includes your user id. + + - __Display Name__ - Enter a memorable name for the database for display purposes. For this lab, use __TEXTDB__. + + - __Database Name__ - Use letters and numbers only, starting with a letter. Maximum length is 14 characters. (Underscores not initially supported.) For this lab, use __TEXTDB__. + + ![Enter the required details.](./images/adb-info.png " ") + + + - __Database Name__ - Use letters and numbers only, starting with a letter. Maximum length is 14 characters. (Underscores not initially supported.) For this lab, use __TEXTDB__ and append you LiveLabs user id. For example, __TEXTDB7199__. + + ![choose database name](./images/adb-info-livelabs.png) + + +4. Choose a workload type: Select the workload type for your database from the choices: + + - __Transaction Processing__ - For this lab, choose __Transaction Processing__ as the workload type. + + ![Choose a workload type.](./images/workload-type2.png " ") + +5. Choose a deployment type: Select the deployment type for your database from the choices: + + - __Shared Infrastructure__ - For this lab, choose __Shared Infrastructure__ as the deployment type. + - __Dedicated Infrastructure__ - Alternatively, you could have chosen Dedicated Infrastructure as the deployment type. + + ![Choose a deployment type.](./images/deployment-type.png " ") + +6. Configure the database: + + + - __Always Free__ - If your Cloud Account is an Always Free account, you can select this option to create an always free autonomous database. An always free database comes with 1 CPU and 20 GB of storage. For this lab, we recommend you leave Always Free unchecked. + + + - __Always Free__ - For this lab, we recommend you leave Always Free unchecked. + + - __Choose database version__ - Select 19c from the database version. Note: This lab should work on 21c AJD database as well. + - __OCPU count__ - Number of OCPUs for your service. For this lab, leave the default __1 OCPU__. If you choose an Always Free database, it comes with 1 OCPU. + - __Storage (TB)__ - Select your storage capacity in terabytes. For this lab, leave the default __1 TB__ of storage. If you choose an Always Free database, it comes with 20 GB of storage. + - __Auto Scaling__ - For this lab, keep auto scaling enabled, to allow the system to automatically use up to three times more CPU and IO resources to meet workload demand. + + *Note: You cannot scale up/down an Always Free autonomous database.* + + ![Choose the remaining parameters.](./images/configuration.png " ") + +7. Create administrator credentials: + + - __Password and Confirm Password__ - Specify the password for ADMIN user of the service instance and confirm the password. + + The password must meet the following requirements: + - The password must be between 12 and 30 characters long and must include at least one uppercase letter, one lowercase letter, and one numeric character. + - The password cannot contain the username. + - The password cannot contain the double quote (") character. + - The password must be different from the last 4 passwords used. + - The password must not be the same password that is set less than 24 hours ago. + - Re-enter the password to confirm it. Make a note of this password. + + ![Enter password and confirm password.](./images/administration.png " ") + +8. Set network access: + + Network access allows you to limit connections to certain IP addresses. For this workshop, we'll set it to "Secure access from anywhere" + + ![Choose network access](./images/network-access.png " ") + +9. Choose a license type: + + For Autonomous JSON Database, only __License Included__ is available. For other Autonomous Database workloads, you have these options: + - __Bring Your Own License (BYOL)__ - Select this type when your organization has existing database licenses. + - __License Included__ - Select this type when you want to subscribe to new database software licenses and the database cloud service. + + ![Choose license type](./images/license-type.png " ") + +10. Click __Create Autonomous Database__. + + ![Click Create Autonomous Database.](./images/create-adb-final.png " ") + +11. Your instance will begin provisioning. In a few minutes, the state will turn from Provisioning to Available. At this point, your Autonomous JSON database is ready to use! Have a look at your instance's details here including the Database Name, Database Version, OCPU Count, and Storage. + + ![Database instance homepage.](./images/provisioning.png " ") + + +You may now **proceed to the next lab**. + +## Learn More + +* [Provision Autonomous JSON Database](https://docs.oracle.com/en/cloud/paas/autonomous-json-database/ajdug/autonomous-provision.html#GUID-0B230036-0A05-4CA3-AF9D-97A255AE0C08) + +## Acknowledgements + +- **Author** - Roger Ford, Principal Product Manager, Oracle Database +- **Contributors** - Kamryn Vinson, Andres Quintana, James Zheng +- **Last Updated By/Date** - Roger Ford, March 2022 diff --git a/text/full-text-indexing/queries/images/fuzzy-search.png b/text/full-text-indexing/queries/images/fuzzy-search.png new file mode 100644 index 000000000..eb8efc908 Binary files /dev/null and b/text/full-text-indexing/queries/images/fuzzy-search.png differ diff --git a/text/full-text-indexing/queries/images/john.png b/text/full-text-indexing/queries/images/john.png new file mode 100644 index 000000000..fcd26990e Binary files /dev/null and b/text/full-text-indexing/queries/images/john.png differ diff --git a/text/full-text-indexing/queries/images/mixed-query.png b/text/full-text-indexing/queries/images/mixed-query.png new file mode 100644 index 000000000..7da329f47 Binary files /dev/null and b/text/full-text-indexing/queries/images/mixed-query.png differ diff --git a/text/full-text-indexing/queries/images/near-search1.png b/text/full-text-indexing/queries/images/near-search1.png new file mode 100644 index 000000000..db160aa73 Binary files /dev/null and b/text/full-text-indexing/queries/images/near-search1.png differ diff --git a/text/full-text-indexing/queries/images/near-search2.png b/text/full-text-indexing/queries/images/near-search2.png new file mode 100644 index 000000000..ac54a8751 Binary files /dev/null and b/text/full-text-indexing/queries/images/near-search2.png differ diff --git a/text/full-text-indexing/queries/images/or-search.png b/text/full-text-indexing/queries/images/or-search.png new file mode 100644 index 000000000..231b2f7cb Binary files /dev/null and b/text/full-text-indexing/queries/images/or-search.png differ diff --git a/text/full-text-indexing/queries/images/phrase-search.png b/text/full-text-indexing/queries/images/phrase-search.png new file mode 100644 index 000000000..912e36ff3 Binary files /dev/null and b/text/full-text-indexing/queries/images/phrase-search.png differ diff --git a/text/full-text-indexing/queries/images/select-star.png b/text/full-text-indexing/queries/images/select-star.png new file mode 100644 index 000000000..755a7a35d Binary files /dev/null and b/text/full-text-indexing/queries/images/select-star.png differ diff --git a/text/full-text-indexing/queries/images/wild-cards.png b/text/full-text-indexing/queries/images/wild-cards.png new file mode 100644 index 000000000..358eeb624 Binary files /dev/null and b/text/full-text-indexing/queries/images/wild-cards.png differ diff --git a/text/full-text-indexing/queries/queries.md b/text/full-text-indexing/queries/queries.md new file mode 100644 index 000000000..c8c4eaf17 --- /dev/null +++ b/text/full-text-indexing/queries/queries.md @@ -0,0 +1,238 @@ +# Oracle Text Queries + +## Introduction + +This lab will use the SQL Workshop in Database Actions from the Autonomous Transaction Processing page. We will explore the CONTAINS operator, used to query Oracle Text indexes. + +Estimated Time: 10 minutes + +### Objectives + +In this lab, you will: + +* Explore the CONTAINS text query operator +* Look at various basic text searches +* See how the SCORE() operator helps you rank your query results + +### Prerequisites + +* Be logged into your Oracle Cloud Account +* Have completed the previous lab to create an index + +## Task 1: Open Database Actions + +1. If you have just completed the previous lab, you can skip this task as you will already be in Database Actions. +Otherwise, login to the Oracle Cloud. + + + +2. If you are using a Free Trial or Always Free account, and you want to use Always Free Resources, you need to be in a region where Always Free Resources are available. You can see your current default **Region** in the top, right hand corner of the page. + + ![Select region on the far upper-right corner of the page.](./images/region.png " ") + + + + +3. If you are using a LiveLabs account, you need to be in the region your account was provisioned in. You can see your current default **Region** in the top, right hand corner of the page. Make sure that it matches the region on the LiveLabs Launch page. + + ![Select region on the far upper-right corner of the page.](./images/region.png " ") + + + +4. Click the navigation menu in the upper left to show top level navigation choices. + +5. Click on **Oracle Database** and choose **Autonomous Transaction Processing**. + + ![Click Autonomous Transaction Processing](./images/adb-atp.png " ") + +6. Use the __List Scope__ drop-down menu on the left to select the same compartment where you created your Autonomous Databae in Lab 2. Make sure your workload type is __Transaction Processing__. Enter the first part of your user name, for example `LL185` in the Search Compartments field to quickly locate your compartment. + + + ![Check the workload type on the left.](images/livelabs-compartment.png " ") + + + + ![Check the workload type on the left.](./images/compartments.png " ") + + ![check workload type](./images/workload-type.png " ") + + + > **Note:** Avoid the use of the ManagedCompartmentforPaaS compartment as this is an Oracle default used for Oracle Platform Services. + + +7. You should see your database **TEXTDB** listed in the center. Click on the database name "JSONDB". + + ![database name](./images/database-name.png " ") + +8. On the database page, choose __Database Actions__. + + ![dbactions button](./images/dbactions-button.png " ") + +9. You are now in Database Actions. + + Database Actions allows you to connect to your Autonomous Database through various browser-based tools. We will just be using the SQL workshop tool. + + +10. You should be in the Database Actions panel. Click on the **SQL** card + + ![dbactions menu sql](./images/dbactions-menu-sql.png " ") + +## Task 2: Run Text Queries + +1. First familiarize yourself with the text contained in USER_DATA. Copy the following and press the "Run C + + ``` + + select * from user_data + + ``` + + ![select all rows](./images/select-star.png " ") + + There are three rows in our table. Take a minute to review each one. + + +2. The CONTAINS operator + + To search an Oracle Text CONTEXT index you must use the CONTAINS operator. CONTAINS is specific to that type of index. + Unlike 'ordinary' indexes, you can't get the same results with or without an index. CONTAINS simply won't work if there is no CONTEXT index present. + + CONTAINS is a function returning a number. It is almost allways used in the form __WHERE CONTAINS(...) > 0__. If the return value is greater than zero, there's a match for the row, if it's zero there isn't. + + CONTAINS takes two or three arguments. The third is optional and we'll leave it for later. The arguments are: + + 1. The name of the column to be searched + 2. A string value to search for. The string can be a literal string, or anything that evaluates to a string (VARCHAR2 or CLOB). + + Let's try a simple example. We'll look for the word 'John': + + ``` + + select * from user_data + where contains ( note, 'john' ) > 0 + + ``` + ![Search for JOHN](./images/john.png " ") + + Notice that we found the one row with the word "John". However, we didn't find the row which contains "Johnny". This illustrates one of the many differences between an Oracle Text search and a simple LIKE search such as __WHERE TEXT LIKE '%John%'__. LIKE does substring searches, whereas CONTAINS is looking (by default) for whole words. + + You could also try searching for upper-case JOHN. You'll get the same result. CONTAINS searches (at least for an English index) are not case-sensitive, unlike LIKE searches. + +3. Mixed Queries + + CONTAINS is a SQL operator. So you can, of course, combine it with any other WHERE clause. For example, we can look for the word 'Smith' where the value of AMOUNT is less than 100. Let's try that: + + ``` + + select * from user_data + where amount < 100 + and contains ( note, 'smith' ) > 0 + + ``` + + ![A mixed query](./images/mixed-query.png " ") + +4. An OR search + + The search string argument to CONTAINS has its own syntax, with various internal operators such as __AND__, __OR__, __NEAR__ and many others. We'll just show one example here, for more information you should refer to the [Documentation](https://docs.oracle.com/en/database/oracle/oracle-database/19/ccref/oracle-text-CONTAINS-query-operators.html). + + Before, we searched for "John" but didn't find "Johnny". Let's search for either: + + ``` + + select * from user_data + where contains ( note, 'john OR johnny' ) > 0 + + ``` + + Sure enough, now we find both. + + ![an OR search](./images/or-search.png " ") + +5. Wildcards + + An alternative way to run the previous search would be to use the wildcard operator __%__. As with standard SQL, a percentage sign __%__ matches any string of characters, and an underscore _____ character matches any single character. + + So __john%__ will match "john", "johnny", "johnnie", "johnston", and so on. __l_se__ will match "lose", but not "loose". + + Since the wildcards apply only to indexed words, they will never match a space. So __qui%step__ will match "quickstep" but it will **not** match the phrase "quick step". + + Let's try it: + + ``` + + select * from user_data + where contains ( note, 'john%' ) > 0 + + ``` + + ![wildcard search with percent](./images/wild-cards.png " ") + +6. Phrase searches + + If you want to find two words in the same document, you can do an __AND__ search, similar to the __OR__ you did above. If you want to find two words together, you just enter them as a phrase. No need to add quotes or anything, two words together automatically constitute a phrase search and will match only if they appear together in the indexed text. + + ``` + + select * from user_data + where contains ( note, 'first order' ) > 0 + + ``` + + Note that only matches the first row where the actual phrase "first order" appears, and not the other row where the two words appear, but not as a phrase. + + ![phrase search](./images/phrase-search.png " ") + +7. Fuzzy searches + + If you make a mistake or simply don't remember the exact spelling, you can do an __FUZZY__ search. It will find not only the original search word, but also all those similar to it. + + ``` + + select * from user_data + where contains ( note, 'fuzzy(popins)' ) > 0 + + ``` + + Note that there is a spelling mistake in the search word "popins". But with __FUZZY__ search, it actually finds the result with the correct word "Poppins". + + ![phrase search](./images/fuzzy-search.png " ") + +8. Near searches + + You can find words close to each other using __NEAR__ operator. It will find words within specified distance of each other. For example, the following query doesn't find any result. Because there are two words between "order" and "smith". + + ``` + + select * from user_data + where contains ( note, 'near((order, smith), 1)' ) > 0 + + ``` + + ![phrase search](./images/near-search1.png " ") + + While the next query finds the result since it correctly specifies the distance 2 between "order" and "smith". + + ``` + + select * from user_data + where contains ( note, 'near((order, smith), 2)' ) > 0 + + ``` + + ![phrase search](./images/near-search2.png " ") + + Please note that by default the order of the words within a near operator doesn't matter, unless the ORDER parameter is explicitly set to TRUE. But in a phrase search, the order of the words does matter. + + +This is as far as well go in exploring queries in this lab, but feel free to experiment futher. + +You can find a list of query operators here: [Contains Query Operators](https://docs.oracle.com/en/database/oracle/oracle-database/19/ccref/oracle-text-CONTAINS-query-operators.html). + +You may now continue to the next lab. + +## Acknowledgements + +- **Author** - Roger Ford, Principal Product Manager +- **Contributors** - Kamryn Vinson, Andres Quintana, James Zheng +- **Last Updated By/Date** - Roger Ford, March 2022 diff --git a/text/full-text-indexing/workshops/freetier/index.html b/text/full-text-indexing/workshops/freetier/index.html new file mode 100644 index 000000000..db0dd4dc6 --- /dev/null +++ b/text/full-text-indexing/workshops/freetier/index.html @@ -0,0 +1,62 @@ + + + + + + + + + Oracle LiveLabs + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + + + + diff --git a/text/full-text-indexing/workshops/freetier/manifest.json b/text/full-text-indexing/workshops/freetier/manifest.json new file mode 100644 index 000000000..5f29e5207 --- /dev/null +++ b/text/full-text-indexing/workshops/freetier/manifest.json @@ -0,0 +1,38 @@ +{ + "workshoptitle": "Full-Text Indexing in Oracle Database", + "help": "livelabs-help-db_us@oracle.com", + "tutorials": [ + { + "title": "Introduction", + "description": "The Introduction is always first. The title and contents menu title match for the Introduction.", + "filename": "../../introduction/introduction.md" + }, + { + "title": "Get Started", + "description": "This is the prerequisites for customers using Free Trial and Paid tenancies, and Always Free accounts (if applicable). The title of the lab and the Contents Menu title (the title above) match for Prerequisite lab. This lab is always first.", + "filename": "https://objectstorage.us-phoenix-1.oraclecloud.com/p/SJgQwcGUvQ4LqtQ9xGsxRcgoSN19Wip9vSdk-D_lBzi7bhDP6eG1zMBl0I21Qvaz/n/c4u02/b/common/o/labs/cloud-login/pre-register-free-tier-account.md" + }, + { + "title": "Lab 1: Provision an Autonomous Database", + "description": "Labs that follow the introduction are numbered, starting with Lab 1", + "filename": "../../provision/provision.md" + }, + { + "title": "Lab 2: Creating Indexes", + "filename": "../../create-indexes/create-indexes.md" + }, + { + "title": "Lab 3: Queries", + "filename": "../../queries/queries.md" + }, + { + "title": "Lab 4: Index Maintenance", + "filename": "../../maintenance/maintenance.md" + }, + { + "title": "Need Help?", + "description": "Solutions to Common Problems and Directions for Receiving Live Help", + "filename":"https://objectstorage.us-phoenix-1.oraclecloud.com/p/SJgQwcGUvQ4LqtQ9xGsxRcgoSN19Wip9vSdk-D_lBzi7bhDP6eG1zMBl0I21Qvaz/n/c4u02/b/common/o/labs/need-help/need-help-freetier.md" + } + ] +} diff --git a/text/full-text-indexing/workshops/livelabs/index.html b/text/full-text-indexing/workshops/livelabs/index.html new file mode 100644 index 000000000..db0dd4dc6 --- /dev/null +++ b/text/full-text-indexing/workshops/livelabs/index.html @@ -0,0 +1,62 @@ + + + + + + + + + Oracle LiveLabs + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + + + + diff --git a/text/full-text-indexing/workshops/livelabs/manifest.json b/text/full-text-indexing/workshops/livelabs/manifest.json new file mode 100644 index 000000000..0d689b9e8 --- /dev/null +++ b/text/full-text-indexing/workshops/livelabs/manifest.json @@ -0,0 +1,39 @@ +{ + "workshoptitle": "Developing with JSON and SODA in Oracle Database", + "help": "livelabs-help-db_us@oracle.com", + "tutorials": [ + { + "title": "Get Started", + "description": "Login to Oracle Cloud", + "filename": "https://objectstorage.us-phoenix-1.oraclecloud.com/p/SJgQwcGUvQ4LqtQ9xGsxRcgoSN19Wip9vSdk-D_lBzi7bhDP6eG1zMBl0I21Qvaz/n/c4u02/b/common/o/labs/cloud-login/cloud-login-livelabs2.md" + }, + { + "title": "Introduction", + "description": "The Introduction is always first. The title and contents menu title match for the Introduction.", + "filename": "../../introduction/introduction.md" + }, + { + "title": "Lab 1: Provision an Autonomous JSON Database", + "description": "Labs that follow the introduction are numbered, starting with Lab 1", + "filename": "../../provision/provision.md", + "type": "livelabs" + }, + { + "title": "Lab 2: Introduction to JSON Collections", + "filename": "../../json-collection/json-collection.md" + }, + { + "title": "Lab 3: SODA for REST", + "filename": "../../soda/soda.md" + }, + { + "title": "Lab 4: Using SQL to work with JSON", + "filename": "../../sql-json/sql-json.md" + }, + { + "title": "Need Help?", + "description": "Solutions to Common Problems and Directions for Receiving Live Help", + "filename":"https://objectstorage.us-phoenix-1.oraclecloud.com/p/SJgQwcGUvQ4LqtQ9xGsxRcgoSN19Wip9vSdk-D_lBzi7bhDP6eG1zMBl0I21Qvaz/n/c4u02/b/common/o/labs/need-help/need-help-freetier.md" + } + ] +} diff --git a/text/full-text-indexing/workshops/ocw-freetier/index.html b/text/full-text-indexing/workshops/ocw-freetier/index.html new file mode 100644 index 000000000..db0dd4dc6 --- /dev/null +++ b/text/full-text-indexing/workshops/ocw-freetier/index.html @@ -0,0 +1,62 @@ + + + + + + + + + Oracle LiveLabs + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + + + + diff --git a/text/full-text-indexing/workshops/ocw-freetier/manifest.json b/text/full-text-indexing/workshops/ocw-freetier/manifest.json new file mode 100644 index 000000000..5f29e5207 --- /dev/null +++ b/text/full-text-indexing/workshops/ocw-freetier/manifest.json @@ -0,0 +1,38 @@ +{ + "workshoptitle": "Full-Text Indexing in Oracle Database", + "help": "livelabs-help-db_us@oracle.com", + "tutorials": [ + { + "title": "Introduction", + "description": "The Introduction is always first. The title and contents menu title match for the Introduction.", + "filename": "../../introduction/introduction.md" + }, + { + "title": "Get Started", + "description": "This is the prerequisites for customers using Free Trial and Paid tenancies, and Always Free accounts (if applicable). The title of the lab and the Contents Menu title (the title above) match for Prerequisite lab. This lab is always first.", + "filename": "https://objectstorage.us-phoenix-1.oraclecloud.com/p/SJgQwcGUvQ4LqtQ9xGsxRcgoSN19Wip9vSdk-D_lBzi7bhDP6eG1zMBl0I21Qvaz/n/c4u02/b/common/o/labs/cloud-login/pre-register-free-tier-account.md" + }, + { + "title": "Lab 1: Provision an Autonomous Database", + "description": "Labs that follow the introduction are numbered, starting with Lab 1", + "filename": "../../provision/provision.md" + }, + { + "title": "Lab 2: Creating Indexes", + "filename": "../../create-indexes/create-indexes.md" + }, + { + "title": "Lab 3: Queries", + "filename": "../../queries/queries.md" + }, + { + "title": "Lab 4: Index Maintenance", + "filename": "../../maintenance/maintenance.md" + }, + { + "title": "Need Help?", + "description": "Solutions to Common Problems and Directions for Receiving Live Help", + "filename":"https://objectstorage.us-phoenix-1.oraclecloud.com/p/SJgQwcGUvQ4LqtQ9xGsxRcgoSN19Wip9vSdk-D_lBzi7bhDP6eG1zMBl0I21Qvaz/n/c4u02/b/common/o/labs/need-help/need-help-freetier.md" + } + ] +} diff --git a/text/full-text-indexing/workshops/ocw-livelabs/index.html b/text/full-text-indexing/workshops/ocw-livelabs/index.html new file mode 100644 index 000000000..db0dd4dc6 --- /dev/null +++ b/text/full-text-indexing/workshops/ocw-livelabs/index.html @@ -0,0 +1,62 @@ + + + + + + + + + Oracle LiveLabs + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + + + + diff --git a/text/full-text-indexing/workshops/ocw-livelabs/manifest.json b/text/full-text-indexing/workshops/ocw-livelabs/manifest.json new file mode 100644 index 000000000..c60bcae2b --- /dev/null +++ b/text/full-text-indexing/workshops/ocw-livelabs/manifest.json @@ -0,0 +1,39 @@ +{ + "workshoptitle": "Developing with JSON and SODA in Oracle Database", + "help": "livelabs-help-db_us@oracle.com", + "tutorials": [ + { + "title": "Get Started", + "description": "Login to Oracle Cloud", + "filename": "https://objectstorage.us-phoenix-1.oraclecloud.com/p/SJgQwcGUvQ4LqtQ9xGsxRcgoSN19Wip9vSdk-D_lBzi7bhDP6eG1zMBl0I21Qvaz/n/c4u02/b/common/o/labs/cloud-login/cloud-login-livelabs2.md" + }, + { + "title": "Introduction", + "description": "The Introduction is always first. The title and contents menu title match for the Introduction.", + "filename": "../../introduction/introduction.md" + }, + { + "title": "Lab 1: Provision an Autonomous JSON Database", + "description": "Labs that follow the introduction are numbered, starting with Lab 1", + "filename": "../../provision/provision.md", + "type": "livelabs" + }, + { + "title": "Lab 2: Introduction to JSON Collections", + "filename": "../../json-collection/json-collection.md" + }, + { + "title": "Lab 3: SODA for REST", + "filename": "../../soda/soda.md" + }, + { + "title": "Lab 4: Using SQL to work with JSON", + "filename": "../../sql-json/sql-json.md" + }, + { + "title": "Need Help?", + "description": "Solutions to Common Problems and Directions for Receiving Live Help", + "filename": "https://objectstorage.us-phoenix-1.oraclecloud.com/p/SJgQwcGUvQ4LqtQ9xGsxRcgoSN19Wip9vSdk-D_lBzi7bhDP6eG1zMBl0I21Qvaz/n/c4u02/b/common/o/labs/need-help/need-help-freetier.md" + } + ] +}