全文檢索的轉義

space6212發表於2019-07-20

在全文檢索中有很多保留字元或保留詞,如果不對這些作轉義處理,則會導致查詢不準確,如:


SQL> select sku from ITEM where ITEM_TYPE='p' and contains(SKU,'CN-A64-02-398-00')>0 and rownum<10;

SKU
--------------------------------------------------------------------------------
ISRC:CN-F29-2000-0051-0/V.J9
ISRC:CN-F29-2000-0036-0/V.J9
ISRC:CN-F29-03-0103-0/V.G2
ISRC:CN-F29-03-0057-0/V.G2
ISRC:CN-F28-03-309-0/A.J6
ISRC:CN-H10-05-0047-0/V.J9
ISRC:CN-H10-05-0046-0/V.J9
ISRC:CN-H10-05-0045-0/V.J9
ISRC:CN-H03-01-0015-0/V.R

9 rows selected

實際上,這不是我們想要的結果,引起這個的原因是字串中包含'-',這個的含義是minus,這個查詢實際上等同於:

select sku from ITEM where ITEM_TYPE='p' and contains(SKU,'CN')>0

minus

select sku from ITEM where ITEM_TYPE='p' and contains(SKU,'A64')>0

........

為了得到正確的結果,我們需要對'-'進行轉義。

全文檢索的轉義有兩種方法:和{}

其中''轉義緊接著''的單個字元,{}轉義包含在'{}'的所有特殊符號。

本例可以轉換為:

SQL> select sku from ITEM where ITEM_TYPE='p' and contains(SKU,'{CN-A64-02-398-00}')>0 and rownum<10;

SKU
--------------------------------------------------------------------------------
ISRC:CN-A64-02-398-00/V.G4

SQL> select sku from ITEM where ITEM_TYPE='p' and contains(SKU,'CN-A64-02-398-00')>0 and rownum<10;

SKU
--------------------------------------------------------------------------------
ISRC:CN-A64-02-398-00/V.G4

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

相關文章