资料介绍
软件简介
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次下载 | 免费
评论
查看更多