Oracle-需要使用CONTAINS查找包含句点的字符串

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

我在表中有一个域索引的字段,因此我可以在查询中使用CONTAINS。我正在尝试创建一个查询,可以准确地找到首字母缩写词(即J.a.V.a.)。问题是句点“.”是一个被忽略的停止字。我需要想办法逃出“.”来解决这个问题。我在网上找不到任何关于如何做到这一点的参考资料,或者我没有完全理解我正在阅读的内容

我试过了

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';