sql >> Database teknologi >  >> RDS >> Oracle

Oracle-tekstsøgning på flere tabeller og joinforbindelser

Jeg løser normalt fuldtekstsøgninger på flere kolonner på forskellige tabeller ved at materialisere en struktureret XML-visning af dem og derefter oprette indekset på hele XML.

Denne løsning er generisk og giver dig også frihed til at søge:hele visningen eller kun en understi. Ulempen er at håndtere opdateringen af ​​en MV, som normalt ikke kan opdateres hurtigt; men opdatering af fuldtekstindeks er normalt heller ikke i realtid, så du kan bare planlægge det.

-- 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. Hvordan man øger ydeevnen af ​​SQL-forespørgsel for at vælge fra 2 tabeller

  2. ORA-00936:manglende udtryksorakel

  3. ORA-00936 Når du bruger datofunktionen i oracle select-sætningen

  4. Ugyldige argumenter bestod fejl for dag, der indlæser mysql-data til bigquery ved hjælp af luftstrøm