Oracle - нужно использовать CONTAINS, чтобы найти строку, содержащую точку - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть поле в таблице, индексированное по домену, чтобы я мог использовать CONTAINS в запросе.Я пытаюсь создать запрос, который может точно найти аббревиатуру (то есть JAVA).Проблема в том, что период "."это стоп-слово, которое игнорируется.Мне нужно выяснить, как это сделать, избегая "."как-то.Я не могу найти какую-либо ссылку в Интернете о том, как это сделать, или, возможно, я не совсем понимаю, что я читаю.

Я пытался

SELECT * FROM table WHERE CONTAINS(CLOB_column, '{J.A.V.A}')>0;

SELECT * FROM table WHERE CONTAINS(CLOB_column, '{J_A_V_A_}')>0;

SELECT * FROM table WHERE CONTAINS(CLOB_column, '{J\.A\.V\.A\.}')>0;

Я создал индекс домена с помощью: CREATE INDEX table_txt_idx ON таблица (CLOB_column) INDEXTYPE IS CTXSYS.CONTEXT;

Я что-то видел (https://oracle -base.com / article / 9i / full-text-indexing-using-oracle-text-9i ) (https://docs.oracle.com/database/121/CCREF/csql.htm#CCREF0100) о добавлении в индекс, но я не думаю, что этоотносится к индексу ctxsys, но я не совсем уверен. Я просто знаю, что я использовал, не работал.

BEGIN
  CTX_DLL.OPTIMIZE_INDEX('IDX_COLUMN_TXT','FAST');
END;

Это не упоминало ctxsys (https://docs.oracle.com/cd/B28359_01/text.111/b28303/ind.htm#BEIIEAFD)

Я создал похожие запросы, используя LIKE и REGEXP_INSTR, и мне нужно создать их, используя CONTAINS, чтобы я мог убедиться, что я запускаю тот, который работает быстрее всего.

SELECT * from table WHERE CLOB_column LIKE '%J.A.V.A.%';  --4.441 seconds

SELECT * from table WHERE REGEXP_INSTR(CLOB_column, '(J\.A\.V\.A\.)')>0; --23.528 seconds

1 Ответ

0 голосов
/ 26 ноября 2018

По какой причине вы не можете использовать НРАВИТСЯ ?

CREATE TABLE suppliers
( supplier_id number(10) NOT NULL,
  supplier_name varchar2(50) NOT NULL
 );

INSERT INTO suppliers (supplier_id, supplier_name) VALUES (5000, 'Apple');
INSERT INTO suppliers (supplier_id, supplier_name) VALUES (5000, 'J.A.V.A');

SELECT * FROM suppliers WHERE supplier_name LIKE '%.%';
SELECT * FROM suppliers WHERE supplier_name LIKE 'J.A.V.A';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...