Oracle-需要使用CONTAINS查找包含句点的字符串
我在表中有一个域索引的字段,因此我可以在查询中使用CONTAINS。我正在尝试创建一个查询,可以准确地找到首字母缩写词(即J.a.V.a.)。问题是句点“.”是一个被忽略的停止字。我需要想办法逃出“.”来解决这个问题。我在网上找不到任何关于如何做到这一点的参考资料,或者我没有完全理解我正在阅读的内容 我试过了Oracle-需要使用CONTAINS查找包含句点的字符串,oracle,indexing,escaping,contains,Oracle,Indexing,Escaping,Contains,我在表中有一个域索引的字段,因此我可以在查询中使用CONTAINS。我正在尝试创建一个查询,可以准确地找到首字母缩写词(即J.a.V.a.)。问题是句点“.”是一个被忽略的停止字。我需要想办法逃出“.”来解决这个问题。我在网上找不到任何关于如何做到这一点的参考资料,或者我没有完全理解我正在阅读的内容 我试过了 SELECT * FROM table WHERE CONTAINS(CLOB_column, '{J.A.V.A}')>0; SELECT * FROM table WHERE
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;
我通过以下方式创建了域索引:
在表(CLOB_列)上创建索引表_txt_idx,索引类型为CTXSYS.CONTEXT
我看到了关于附加到索引的内容(),但我认为它不适用于ctxsys索引,但我不能完全确定。我只知道我用的东西不管用
BEGIN
CTX_DLL.OPTIMIZE_INDEX('IDX_COLUMN_TXT','FAST');
END;
这没有提到ctxsys()
我已经使用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
有什么原因你不能用吗
你好看看这个答案:。整个答案对您很有用,它还包含“Oracle文本索引元素”中“标点符号”一章的链接:可能与Great thread@Peter重复!我想知道为什么我没有找到它?可能在搜索中没有使用正确的单词。谢谢我会检查一下,让你们知道它是否有效。没有理由,只是我应该让它以最有效的方式工作,这是我唯一没有工作来比较的东西。到目前为止,在我的示例表中LIKE是最有效的,但是我想看看是否由于索引的缘故,包含的内容更好。它将与其他查询一起每晚运行,因此越快越好。
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';