Xapian 學習筆記 4 分面搜尋

2021-06-06 21:15:09 字數 1338 閱讀 5456

------------------------

圖:

它的優點有:

對於xapian中每乙個文件,都有一些values與之對應,你可以把要聚類的字段值放入這些值中,並且給出乙個唯一的slot號,使用xapian::document::add_value()方法來做,例如你有乙個圖書資料庫,你可以把「price"放在slot 0的位置,"author"放在slot 1的位置,」publisher「放在slot 2的位置,"publication type"放在slot 3的位置,這樣在查詢的時候,你可以按特定的value進行聚合,如要求命中文件按price在100-200,200-400,400-500,..的圖書,要注意的是對於一些資料的字段要用xapian::sortable_serialize方法來進行編碼才能正確的被排序。

如上面這個圖書資料庫的例子,你想對price與author進行分面查詢,你要對每乙個聚類的字段使用

xapian::enquire::add_matchspy()方法,把xapian::valuecountmatchspy物件加入其中,它主要是用於計算某乙個值在命中文件中出現的頻率,一般**如下:

xapian::valuecountmatchspy spy0(0);

xapian::valuecountmatchspy spy1(1);

xapian::enquire enq(db);

enq.add_matchspy(&spy0);

enq.add_matchspy(&spy1);

enq.set_query(query);

xapian::mset mset = enq.get_mset(0, 10, 10000);

其中的10000表示要求xapian至少對10000個文件進行聚類檢查,而其中的spy物件儲存了分面資訊,這些資訊可以通過如下方式來得到,

xapian::termiterator i;

for (i = spy0.values_begin(); i != spy0.values_end(); ++i)

for (i = spy1.values_begin(); i != spy1.values_end(); ++i)

其中*i表示聚類的值,也就是上面的add_value()方法所新增的值,如果是資料型別,要通過xapian::sortable_unserialize方法來解碼,不然顯示可能是混亂,後面的get_termfreq()表示這個聚類命中了幾個文件,如price區間在100-200的命中了30個產品。

百面機器學習筆記 4

roc曲線 question 如何計算auc?answer 首先,auc是指roc曲線下的面積大小,該值能夠量化地反映基於roc曲線衡量出的模型效能。計算auc值只需要沿著roc橫軸做積分就可以了。由於roc曲線一般都處於y x這條直線的上方 如果不是的話,只要把模型 的 概率反轉成1 p就可以得到...

面經筆記 範圍搜尋 最近鄰搜尋

kd樹 參考 上文中一直在講最近鄰問題,也就是說只找最近的那唯一乙個鄰居,但如果現實中需要我們找到k個最近的鄰居。該如何做呢?對的,之前blog內曾相近闡述過尋找最小的k個數的問題,顯然,尋找k個最近鄰與尋找最小的k個數的問題如出一轍。用大根堆保持k個最小的距離,然後用根的距離 也就是其中最大的乙個...

Git學習筆記4 分支

參考鏈結廖雪峰git教程 建立本地分支 git branch testing 建立乙個分支,並命名為testing 建立遠端分支 分兩步 git branch testing 建立乙個分支,並命名為testing git push origin testing 將分支推送到遠端 相當於建立乙個遠端分...