【问题标题】:Oracle ctxcat.context contains exhibits strange behavior on certain search parametersOracle ctxcat.context 包含在某些搜索参数上表现出奇怪的行为
【发布时间】:2012-08-15 13:13:10
【问题描述】:

在 Oracle Database 10g 和 Oracle Database Express Edition 11g 中,我遇到了一些奇怪的行为。我有一列被索引为 ctxsys.context 类型索引。当我使用 contains 函数查询表以获取结果时,它可以工作,除非我正在搜索的值是“Still”。然后它不返回任何结果。当我使用“仍然”之类的列搜索相同的数据时,我通常会得到结果。如果我使用 contains 搜索“Jazz”,则可以正常获得结果。

下面是我用于在新创建的测试表上重现此行为的 sql。

-- Setup the table with an index and some data
create table "STILL_TEST" (
    "ID" number(22,0) primary key,
    "PROF_DATA_15" varchar2(255 char),
    "OTHER" varchar2(255 char),
    "SHORTER" varchar2(100 char)
);
insert into "STILL_TEST" values (1, 'Still', 'Still', 'Still');
insert into "STILL_TEST" values (3, 'Jazz', 'Jazz', 'Jazz');
CREATE INDEX "STILL_TEST_PROF_DATA_15" ON "STILL_TEST" ("PROF_DATA_15")
   INDEXTYPE IS "CTXSYS"."CONTEXT" PARAMETERS ('SYNC (ON COMMIT)');
commit;

-- Now query it a bit. See how both types of queries work if the
-- parameter is 'Jazz'
select * from "STILL_TEST" where prof_data_15 like 'Jazz';
select * from "STILL_TEST" where contains(prof_data_15, 'Jazz') > 0;
select * from "STILL_TEST" where prof_data_15 like 'Still';
-- So far so good, but why doesn't this next query return any results?
select * from "STILL_TEST" where contains(prof_data_15, 'Still') > 0;

【问题讨论】:

  • 没有必要引用每个对象。如果您从不引用任何内容,则默认为大写,您不需要引用任何内容。
  • 转载here我不明白为什么没有得到“静止”。
  • @FlorinGhita,已经尝试过了,但无法让它工作......甚至复制和粘贴所有内容以确保它是相同的。我的第一个想法是插入语句中有一些“狡猾”的字符,但重写它我一无所获。
  • 单词“直到”同样失败。我将它编辑到同一个 SqlFiddle 中。 'if' 和 'while' 这两个词也是如此。

标签: database oracle indexing contains


【解决方案1】:

这里的默认停止列表似乎有问题。如果索引是使用空的停止列表创建的,那么 'still' 和其他关键字将被视为搜索参数。

以下创建带有空停止列表的索引:

 CREATE INDEX "STILL_TEST_PROF_DATA_15" ON "STILL_TEST" ("PROF_DATA_15")
 INDEXTYPE IS "CTXSYS"."CONTEXT" PARAMETERS ('STOPLIST CTXSYS.EMPTY_STOPLIST');

这里有一些链接可以获取更多关于停止列表的信息:

http://docs.oracle.com/cd/A91202_01/901_doc/text.901/a90121/cdatadi9.htm

http://docs.oracle.com/cd/A91202_01/901_doc/text.901/a90121/astopsu2.htm#43324

奇怪的是,根据上面的链接,“still”这个词并没有出现在默认停止列表中。

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多