2012-02-17 78 views
3

我想追查一些现有的代码中的错误,我是新的Oracle全文搜索...如何使用Oracle全文搜索在XML CLOB中搜索单词“IN”?

我遇到了一个查询,返回包含单词“IN”在一个XML文档中。

例如,可以说我有这个片段存储在CLOB在我的Oracle 10数据库:

<a> 
    <b>IN</b> 
</a> 

我想找到有B配“IN”的值,所以我创建的所有条目where子句看起来像这样:

where contains(column, '(IN) INPATH (//b)') > 0; 

但是这不会返回任何结果。我试图寻找其他术语,如'AA'和'BS',它工作正常。

我已经搜索了谷歌和Oracle documentation的保留字,但我没有看到“IN”在那里列出。显然,它是SQL中的一个保留字,但我在完整的测试搜索或XPATH文档中没有看到该字的引用。

我也尝试通过用{},“”和任何我能想到的疯狂的东西来避开这个词,但这并没有帮助。

任何意见将不胜感激!

回答

2

你的假设可能是对的。在全文检索中,术语是“停用词”。如果您未定义自己的停止列表,则使用默认值:CTXSYS.DEFAULT_STOPLIST。请参阅this文章,了解默认英语停用列表。 'in'这个词在里面。

您可以使用CTX_DDL程序包,特别是CTX_DDL.REMOVE_STOPWORDCTX_DDL.CREATE_STOPLIST删除停用词或创建自己的停用列表。

+0

这正是我所需要的。谢谢! – Linkadvitch 2012-02-20 19:05:31