Oracle中的文本搜索

时间:2016-04-08 05:34:53

标签: oracle indexing oracle-text

我创建了一个表

CREATE TABLE "SCOTT"."TEXTSEARCH" 
   (    "NAME" VARCHAR2(20 BYTE), 
    "RESUME" BLOB, 
    "TEXT" CLOB
   )

我插入的值包含代表简历的Word 2013文档。简历的文字是

Hi This Is My Resume  
Testing  
HTML  
999999

然后我创建了一个文本索引

CREATE INDEX "SCOTT"."RESUMETEXTINDEX" ON "SCOTT"."TEXTSEARCH" ("RESUME") 
   INDEXTYPE IS "CTXSYS"."CONTEXT"  PARAMETERS ('LEXER ctxsys.basic_lexer');

当我运行查询时

select * from textsearch WHERE contains(resume, 'testing')> 0;

我收到结果但是当我搜索“我的”这个词时,我没有得到任何结果

select * from textsearch WHERE contains(resume, 'my')> 0;

,也不

select * from textsearch WHERE contains(resume, 'My')> 0;

返回结果

1 个答案:

答案 0 :(得分:0)

Oracle Text索引不会索引用户不希望搜索的常用词。这些被称为停用词。我不知道你的索引使用的默认禁用词列表中的每个单词,但我希望“my”在该列表中。

您可以修改默认的停止列表或创建自己的停止列表,但除非您真的希望用户能够仅查询单词“my”,这似乎不太可能,我不会。除了使索引更小(并且搜索速度更快)之外,停用词使搜索短语更加友好。如果“我的”是一个停用词,则短语“我的简历”将匹配“约翰的简历”或“简历”,因为停用词与任何单词匹配。对于人类而言,这通常是一件好事 - 大多数人大多数时候都不想错过结果,因为普通动词碰巧在文档中有不同的时态(例如“is”vs“是”)。

有关详细信息,请参阅Text Application Developer's Guide中的4.1.5查询停用词。