为上下文全文搜索索引相同 table 的多个列?
Index multiple columns of the same table for Context Full-Text Search?
我有一个包含 3 列的 table,需要启用它们以通过 Oracle APEX 应用程序进行全文搜索。如何为所有三列创建索引以便它们都可以被搜索?
目前我在一列上有上下文索引 (STOP_NAME):
DECLARE
l_query VARCHAR2(4000);
BEGIN
l_query:=
'select
"BUS_STOP_ID",
"STOP_NAME",
"DESC_NOTES",
"BUS_NUMBERS",
"LOCATION"
from "BUS_STOPS" ';
IF v('P2_REPORT_SEARCH') IS NOT NULL THEN
l_query := l_query||' '||'
where
(
CONTAINS(STOP_NAME, ''$'|| v('P2_REPORT_SEARCH') ||''') > 0
)
';
END IF;
RETURN l_query;
END;
但是如何创建一个使用三列(stop_name、desc_notes、bus_numbers)进行文本搜索的索引?我尝试使用使用 3 列创建的标准索引,但它没有用:
CREATE INDEX bus_stops_ctx_idx
ON bus_stops (stop_name, bus_numbers, desc_notes)
INDEXTYPE IS ctxsys.context;
第一步是创建索引首选项:
BEGIN
ctx_ddl.create_preference('my_multi_idx', 'MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('my_multi_idx', 'COLUMNS', 'stop_name, desc_notes, bus_numbers');
END;
然后使用先前设置的首选项创建索引本身:
CREATE INDEX bus_stops_ctx_idx
ON bus_stops(stop_name)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('DATASTORE my_multi_idx SYNC ( ON COMMIT )');
我有一个包含 3 列的 table,需要启用它们以通过 Oracle APEX 应用程序进行全文搜索。如何为所有三列创建索引以便它们都可以被搜索?
目前我在一列上有上下文索引 (STOP_NAME):
DECLARE
l_query VARCHAR2(4000);
BEGIN
l_query:=
'select
"BUS_STOP_ID",
"STOP_NAME",
"DESC_NOTES",
"BUS_NUMBERS",
"LOCATION"
from "BUS_STOPS" ';
IF v('P2_REPORT_SEARCH') IS NOT NULL THEN
l_query := l_query||' '||'
where
(
CONTAINS(STOP_NAME, ''$'|| v('P2_REPORT_SEARCH') ||''') > 0
)
';
END IF;
RETURN l_query;
END;
但是如何创建一个使用三列(stop_name、desc_notes、bus_numbers)进行文本搜索的索引?我尝试使用使用 3 列创建的标准索引,但它没有用:
CREATE INDEX bus_stops_ctx_idx
ON bus_stops (stop_name, bus_numbers, desc_notes)
INDEXTYPE IS ctxsys.context;
第一步是创建索引首选项:
BEGIN
ctx_ddl.create_preference('my_multi_idx', 'MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('my_multi_idx', 'COLUMNS', 'stop_name, desc_notes, bus_numbers');
END;
然后使用先前设置的首选项创建索引本身:
CREATE INDEX bus_stops_ctx_idx
ON bus_stops(stop_name)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('DATASTORE my_multi_idx SYNC ( ON COMMIT )');