0

我创建了一个表

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;

返回结果

4

1 回答 1

0

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

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

有关详细信息,请参阅文本应用程序开发人员指南中的 4.1.5 查询停用词部分。

于 2016-04-08T06:06:27.257 回答