wwsearch
wwsearch是企业微信后台自研的全文检索引擎。它为海量用户下的全文快速检索而设计,底层支持可插拔的lsm tree存储引擎。目前覆盖企业微信所有在线检索场景:企业员工通讯录、审批、日报、周报、汇报、企业素材检索,也包括企业邮箱的全文邮件检索。 最大业务场景有300+亿条记录,索引词项万亿+,存储容量几十TB,支撑实时在线用户检索。
lsm tree
具体使用例子参考example/example.cpp。 这里简单对接口字段进行说明。
example/example.cpp
主要涉及6个接口,分别是:
下面以用户常用的AddOrUpdateDocuments为例说明用法。
AddOrUpdateDocuments
// wwsearch/index_writer.h bool AddOrUpdateDocuments(const TableID &table, std::vector<DocumentUpdater *> &documents, std::string *store_buffer = nullptr, SearchTracer *tracer = nullptr); // wwsearch/document.h class DocumentUpdater { ... Document new_document_; ... }; class Document { ... std::vector<IndexField *> 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_; ... }
用户使用涉及主要字段说明:
主要涉及接口:
// wwsearch/searcher.h SearchStatus DoQuery(const TableID &table, Query &query, size_t top, std::vector<Filter *> *filter, std::vector<SortCondition *> *sorter, std::list<DocumentID> &docs, uint32_t min_match_filter_num = 0)
用户使用涉及主要字段说明:
依赖模块为:
# 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_* .
编译完成将可以看到:
接下来可以愉快使用啦,enjoy it!
提交pull request贡献代码前,请参考 Contributing.md 。 wwsearch基于c++11开发,遵循Google C++ Style Guide代码风格,提交代码前需要使用附带的.clang- format格式化代码;
.clang- format
使用中遇到问题,可以有以下途径反馈:
wwsearch 开源协议为 Apache License Version 2.0 ,详细的 License 请参考 LICENSE.TXT