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 节查询停用词。
我创建了一个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 节查询停用词。