我创建了一个表
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;
返回结果
答案 0 :(得分:0)
Oracle Text索引不会索引用户不希望搜索的常用词。这些被称为停用词。我不知道你的索引使用的默认禁用词列表中的每个单词,但我希望“my”在该列表中。
您可以修改默认的停止列表或创建自己的停止列表,但除非您真的希望用户能够仅查询单词“my”,这似乎不太可能,我不会。除了使索引更小(并且搜索速度更快)之外,停用词使搜索短语更加友好。如果“我的”是一个停用词,则短语“我的简历”将匹配“约翰的简历”或“简历”,因为停用词与任何单词匹配。对于人类而言,这通常是一件好事 - 大多数人大多数时候都不想错过结果,因为普通动词碰巧在文档中有不同的时态(例如“is”vs“是”)。
有关详细信息,请参阅Text Application Developer's Guide中的4.1.5查询停用词。