oracle全文索引之STOPLIST_1_BASIC_STOPLIST

jolly10發表於2009-05-25
這篇文章開始介紹Oracle全文索引的STOPLIST屬性。首先介紹的是BASIC_STOPLIST。[@more@]Oracle的全文索引允許使用者建立停用詞,來遮蔽那些包含資訊量比較小且出現機率比較高的詞語。

比如英文中的a、this、are、the等詞語,幾乎每篇文章中都會包含這些常用詞,因此對這些詞語進行索引的意義不大。

SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));

表已建立。

SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));

Table created.

SQL> INSERT INTO T VALUES (1, 'THIS IS A STOPLIST EXAMPLE.');

1 row created.

SQL> COMMIT;

Commit complete.


SQL> exec CTX_DDL.CREATE_STOPLIST('TEST_BASIC', 'BASIC_STOPLIST');

PL/SQL procedure successfully completed.

SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('STOPLIST TEST_BASIC');

Index created.

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'EXAMPLE') > 0;


ID DOCS
---------- ------------------------------
1 THIS IS A STOPLIST EXAMPLE.


SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'A') > 0;

ID DOCS
---------- ------------------------------
1 THIS IS A STOPLIST EXAMPLE.

建立了一個BASIC_STOPLIST後,由於並沒有新增停用詞,這個BASIC_STOPLIST停用詞表是空的。這個時候不會遮蔽任何詞語。

SQL> exec CTX_DDL.ADD_STOPWORD('TEST_BASIC', 'A');

PL/SQL procedure successfully completed.

SQL> drop index IND_T_DOCS
2 ;

Index dropped.

SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('STOPLIST TEST_BASIC');

Index created.

SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'EXAMPLE') > 0;
ID DOCS
---------- ------------------------------
1 THIS IS A STOPLIST EXAMPLE.


SQL> SELECT * FROM T WHERE CONTAINS(DOCS, 'A') > 0;

no rows selected


在上面的例子中,將單詞’a’新增到了停用詞表中,重新建立索引後,發現停用詞已經生效。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271283/viewspace-1022468/,如需轉載,請註明出處,否則將追究法律責任。

相關文章