Oracle CONTAINS()不返回数字的结果

时间:2014-11-06 20:02:38

标签: sql oracle11g oracle10g oracle-text

所以我的这个表有一个全文索引列“value”。该字段包含一些数字字符串,当我使用如下查询时正确返回:

select value
    from mytable 
    where value like '17946234';

麻烦的是,它非常慢,因为这个表中有很多行,但是当我使用CONTAINS运算符时,我没有得到任何结果:

select value
    from mytable
    where CONTAINS ( value, '17946234',1)>0

有人有任何想法吗?

不幸的是,我不是Oracle老兄,同样的查询在SQL Server中运行良好。我觉得它必须是一个停止列表,或者我可以更改Oracle Lexer的东西,但不确定如何。

1 个答案:

答案 0 :(得分:0)

这可能是由于INDEXTYPE IS CTXSYS.CONTEXT一般,或者在查找添加的记录之后未更新的索引(CONTEXT类型索引不是事务性的,而CTXCAT类型索引是)。

但是,如果你在语句中没有意外丢失通配符(换句话说:如果确实不需要通配符。),你可以只查询

select value from mytable where value = '17946234';

可能由普通索引支持。 (根据您的特定数据分布和运行的查询,索引可能无助于查询性能。) 否则

select value from mytable where instr(value, '17946234') > 0;

可能就足够了。