學習Xapian 3 同義詞的查詢拓展

2021-07-09 12:58:37 字數 1393 閱讀 3550

xapian支援同義詞的查詢拓展。

按照同義詞進行拓展算是查詢拓展最基本的一種方式。

比如「汽車展覽」和「車展」是同義詞,我們搜尋汽車展覽的時候,也會把「車展」的結果返回。

很多人認為這個就是拼寫校正,但實際它比拼寫校正稍微高階點,特別是放在xapian的語境下,畢竟拼寫校正是基於編輯距離而不是語義的。

1、在db寫入同義詞組

建立同義詞組的api很簡明。

writabledatabase::add_synonym(term, synonym)

這一對同義詞是有方向的,term的同義詞是synonym,反之不成立。

即我們搜尋「汽車展覽」時能拓展出「車展」,反之不成立,如果你需要,那麼反著再插入一次吧!

2、在搜尋時使用同義詞組

和拼寫校正一樣,肯定的對queryparser設定db,queryparser::set_database()

然後在queryparser::parse_query時,第二個引數傳入flag_synonym 或者 flag_auto_synonyms

flag_synonym 是在查詢語句中出現~word 的形式,則把word自動同義詞拓展

flag_auto_synonyms 則是把全部的詞都給查詢拓展,不用顯示的寫~。

例子:寫入同義詞組

#include

#include

using namespace std; 

#define content "70比 69, 這是 男籃 亞錦賽 歷史上 的 最小 分 差 比賽 , 笑 到 最後 的是 東道主 中國隊 。 可以說 , 這是 一次 最 驚險 的 勝利 ; 也可 以 說 , 這是 中國男籃 最 幸運 的 結局 。終 >  場 哨 響 , 中國隊 主教練 鄧 華德 和 籃管中心 副主任 胡 加時 緊緊擁抱 在一 起 , 兩人 都 激動 得 熱淚盈眶 —— 中國隊 贏了 , 贏得 很 慶幸 。" 

#define index_path "./index_data" 

#define word1 "男藍" 

#define word2 "男籃" 

int main() 

catch(const xapian::error &e) 

return 0; 

}例子:同義詞組查詢拓展

#include

#include

using namespace std; 

#define query "~男藍 and 中國隊" 

#define index_path "./index_data" 

int main() 

//close db 

db.close(); 

} catch(const xapian::error &e) 

return 0; 

}

同義詞資訊的查詢

同義詞作為一種資料庫物件,它的相關資訊被儲存在資料字典中。與同義詞有關的資料字典有三個 user sysnonyms all synonyms dba synonyms。其中在資料字典user synonyme中記錄了當前使用者所擁有的同義詞。這個表的個列定義及其意義如下所示 名稱是否為空?型別意義...

Oracle同義詞學習

從字面上理解就是別名的意思,和檢視的功能類似。就是一種對映關係。同義詞擁有如下好處 節省大量的資料庫空間,對不同使用者的操作同一張表沒有多少差別 擴充套件的資料庫的使用範圍,能夠在不同的資料庫使用者之間實現無縫互動 同義詞可以建立在不同乙個資料庫伺服器上,通過網路實現連線。oracle資料庫中提供了...

Oracle 同義詞synonym 學習

同義詞 從字面上理解就是別名的意思,和試圖的功能類似。就是一種對映關係。1.建立同義詞語句 create public synonym table name for user.table name 其中第乙個 table name和第二個 table name 可以不一樣。此外如果要建立乙個遠端的資...