Oracle
 sql >> база данни >  >> RDS >> Oracle

Текстово търсене на Oracle в множество таблици и обединения

Обикновено решавам търсения в пълен текст в множество колони в различни таблици, като материализирам структуриран XML изглед за тях и след това създавам индекс върху целия XML.

Това решение е общо и ви дава свобода при търсене:целия изглед или само подпът. Недостатъкът е управлението на обновяването на MV, което обикновено не може да бъде обновено бързо; но актуализирането на индекса на пълен текст обикновено също не е в реално време, така че можете просто да го планирате.

-- Crating the view
CREATE MATERIALIZED VIEW fulltext_helper
NOLOGGING
BUILD DEFERRED
REFRESH COMPLETE ON DEMAND
AS
SELECT 
   a.dob, -- we don't need to fulltext on him
   XMLELEMENT(helper,
     XMLFOREST(a.emp_no AS emp_no, 
              a.dept_no AS dept_no, 
              b.emp_name AS emp_name)
   ) AS indexme
FROM v_depts a 
LEFT OUTER JOIN employee_details b
ON (a.emp_no = b.emp_no);

-- Creating the index
BEGIN
    ctx_ddl.create_preference('fulltext_helper_lexer', 'BASIC_LEXER');
    ctx_ddl.create_preference('fulltext_helper_filter', 'NULL_FILTER');
END;
/
CREATE INDEX fulltext_helper_index ON fulltext_helper (indexme)
INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS (
    'DATASTORE CTXSYS.DIRECT_DATASTORE
     LEXER fulltext_helper_lexer
     FILTER fulltext_helper_filter');

-- Searching the whole data
SELECT * FROM fulltext_helper
WHERE contains(indexme, '{abc} INPATH (/helper)') > 0;

-- Searching only on "empno"
SELECT * FROM fulltext_helper
WHERE contains(indexme, '{abc} INPATH (/helper/emp_no)') > 0;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализиране на SQL, изтриване и вмъкване едновременно

  2. Получаване на сумата от няколко колони от две таблици

  3. Как да премахнете повтарящи се редове в Oracle SQL заявка

  4. Вмъкнете групови записи в отдалечена база данни (dblink) с помощта на Bulk Collect

  5. sqlplus изявление от командния ред