Oracle 中的文本搜索

text search in Oracle

我创建了一个table

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;

我得到了结果,但是当我搜索单词 "my" 时,我没有得到任何结果

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

也不

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

return 结果

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

您可以修改默认的非索引字表或创建您自己的非索引字表,但除非您真的希望用户能够只查询单词 "my",这似乎不太可能,否则我不会这样做。除了使索引更小(搜索速度更快)之外,停用词还使搜索短语更加友好。如果 "my" 是停用词,则短语 "my resume" 将匹配 "John's resume" 或 "the resume",因为停用词可匹配任何词。对于人类来说,这通常是一件好事——大多数人大部分时间都不想错过结果,因为一个常见的动词恰好在文档中有不同的时态("is" vs "was"例如)。

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