資料介紹
軟件簡介
wwsearch
簡介
wwsearch
是企業微信后臺自研的全文檢索引擎。它為海量用戶下的全文快速檢索而設計,底層支持可插拔的lsm tree
存儲引擎。目前覆蓋企業微信所有在線檢索場景:企業員工通訊錄、審批、日報、周報、匯報、企業素材檢索,也包括企業郵箱的全文郵件檢索。 最大業務場景有300+億條記錄,索引詞項萬億+,存儲容量幾十TB,支撐實時在線用戶檢索。
功能介紹
- 實時數據修改:數據寫入即實時可查。對外提供插入、更新、刪除、覆蓋寫等接口,可適應更新頻繁場景,也適應于少改或不改場景。
- 支持靈活Query:支持詞的等值、前綴、模糊匹配。多個Query通過And 、Or進行組合,滿足不同場景的檢索需求。Query還可以按指定field進行檢索。
- 后置過濾:支持對檢索索引后的結果進行二次過濾,支持等值、數值范圍、數組元素查找、字符串模糊等過濾特性。適用于如無法建立高區分度索引的字段過濾、帶有業務特定場景的過濾。
- 靈活排序:支持按多個field的屬性值組合排序,類似order by語義。
- 檢索功能可擴展:場景需要時,可以擴展各類聚合函數(sum/avg…),也可以支持場景文本打分。
實現剖析
接口說明
具體使用例子參考example/example.cpp
。 這里簡單對接口字段進行說明。
Index
主要涉及6個接口,分別是:
- AddDocuments:僅當文檔id不存在時添加;
- UpdateDocuments:僅當文檔id存在時更新;更新時會保留舊文檔存在的未更新field內容;
- AddOrUpdateDocuments:若文檔id不存在則添加,若存在則更新;
- ReplaceDocuments:僅當文檔id存在時替換;
- DeleteDocuments:僅當文檔id存在時刪除;
- AddDocumentsWithoutRead:文檔id不存在則添加,存在則覆蓋;
下面以用戶常用的AddOrUpdateDocuments
為例說明用法。
// wwsearch/index_writer.h
bool AddOrUpdateDocuments(const TableID &table,
std::vector &documents,
std::string *store_buffer = nullptr,
SearchTracer *tracer = nullptr);
// wwsearch/document.h
class DocumentUpdater {
...
Document new_document_;
...
};
class Document {
...
std::vector fields_;
DocumentID document_id_;
...
};
// wwsearch/index_field.h
class IndexField {
...
FieldID field_id_;
IndexFieldFlag field_flag_;
kIndexFieldType field_type_;
uint64_t numeric_value_;
std::string string_value_;
...
}
用戶使用涉及主要字段說明:
- TableID : bussiness_type(uint8_t) + partition_set(uint64_t)組成,分表;
- DocumentID : uint64_t,文檔id,文檔的唯一標識;
-
IndexField : 文檔列的信息,包括列屬性和值。
- field_id_,field的ID
-
field_flag_,索引標記
- kTokenizeFieldFlag,是否分詞
- kStoreFieldFlag,是否存儲原始數據
- kDocValueFieldFlag,是否存儲列值屬性
- kSuffixBuildFlag,是否后綴展開
- kInvertIndexFieldFlag,是否建立倒排索引
-
field_type_,值類型
- kUint32IndexField
- kUint64IndexField
- kStringIndexField
- numeric_value_/ string_value_,字段原始值
Query
主要涉及接口:
// wwsearch/searcher.h
SearchStatus DoQuery(const TableID &table, Query &query, size_t top,
std::vector *filter,
std::vector *sorter,
std::list &docs,
uint32_t min_match_filter_num = 0)
用戶使用涉及主要字段說明:
- TableID : bussiness_type(uint8_t) + partition_set(uint64_t)組成,分表;
- Query :構建查詢的字段信息,可支持AndQuery和OrQuery的嵌套格式,支持PrefixQuery前綴查詢;參考
- Filter :過濾器,支持數字/字符串/數組/多字符串條件過濾;
- SortCondition :對查詢得到的文檔輸出做排序,支持指定field做排序,目前只支持指定數字的field排序;
- min_match_filter_num設置最小匹配的filter數,只要匹配的filter大于此數的文檔才能輸出。
構建方法
依賴模塊說明
依賴模塊為:
# wwsearch/deps/
protobuf-2.4.1
snappy-1.0.4
rocksdb-v5.16.6
tokenizer-mmseg
倉庫中已提前編譯生成依賴庫,您也可以根據編譯環境重新編譯依賴的第三方模塊。
構建方法:
需要使用支持c++ 11的編譯環境構建
mkdir build
cd build
cmake ..
make -j32
cp ../deps/tokenizer/etc/wwsearch_* .
編譯完成將可以看到:
- wwsearch_ut : 單元測試;
- wwsearch_example : 簡單示例,包括index和query。
接下來可以愉快使用啦,enjoy it!
貢獻代碼
提交pull request貢獻代碼前,請參考?Contributing.md?。?wwsearch
基于c++11開發,遵循Google C++ Style Guide代碼風格,提交代碼前需要使用附帶的.clang-format
格式化代碼;
反饋問題
使用中遇到問題,可以有以下途徑反饋:
- 直接在[issues]提問;
開源協議
wwsearch 開源協議為 Apache License Version 2.0 ,詳細的 License 請參考?LICENSE.TXT
- 基于曼哈頓哈希等的三段式圖像檢索方法 5次下載
- 基于蛻變測試的用戶搜索引擎性能分析 9次下載
- PHP教程之PHP動態網頁怎么轉換成HTML 3次下載
- 微信小程序如何開發?微信小程序教程視頻常用組件API開發項目實戰 88次下載
- 基于JAVA技術的搜索引擎的研究與實現
- 主題搜索引擎的研究
- 一種基于DotLucene搜索引擎的自動答疑系統
- Lucene算法優化及其在P2P檢索中的應用
- 化工搜索引擎索引庫的研究和實現
- 一個實用型智能化元搜索引擎的設計與實現
- 教育網BBS搜索引擎設計與實現
- 問答式信息檢索中模式優化及性能評價
- 原創優先的搜索引擎排序算法
- 維、哈、柯全文搜索引擎檢索器的關鍵技術
- 基于網格技術的并行搜索引擎
- 谷歌搜索引擎優化的各個方面和步驟 695次閱讀
- Mysql索引是什么東西?索引有哪些特性?索引是如何工作的? 946次閱讀
- 使用Rust語言重寫的代碼搜索引擎黑鳥系統Blackbird正式啟用 695次閱讀
- 一個基于GPT-4的代碼搜索引擎,開源了! 1186次閱讀
- 如何使用Python直接給微信推送消息 1852次閱讀
- 大數據是如何優化企業搜索引擎 2167次閱讀
- 中控智慧科技企業微信云考勤簡介 2694次閱讀
- 中控智慧科技企業微信考勤機WX108介紹 9647次閱讀
- 對講機和微信的區別在哪里?為什么微信,手機不能取代對講機? 1w次閱讀
- 基于深度學習技術,從頭開始搭建圖像語義搜索引擎 4814次閱讀
- 騰訊微信翻譯團隊開源的人工智能圍棋項目 PhoenixGo 5788次閱讀
- Python開發微信公眾號教程來了 9816次閱讀
- 垂直搜索引擎是什么_垂直搜索引擎有哪些 7790次閱讀
- 微信智能硬件開放平臺_微信硬件平臺怎么接入 1.9w次閱讀
- 基于微信平臺的體重健康管理系統設計 3171次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多