3个版本
0.1.5 | 2023年6月11日 |
---|---|
0.1.4 | 2023年6月4日 |
0.1.3 | 2023年6月4日 |
#1506 in 数据库接口
每月21次下载
71KB
1K SLoC
xapian-rs
xapian的Rust绑定
待办事项列表
ref file:///usr/share/doc/xapian-core-devel/apidoc/html/inherits.html
- 数据库
- WritableDatabase
- Document
- Enquire
- ESet
- ESetIterator
- MSet
- MSetIterator
- MatchSpy
- ValueCountMatchSpy
- PositionIterator
- PostingIterator
- Query
- QueryParser
- RSet
- RangeProcessor
- DateRangeProcessor
- NumberRangeProcessor
- UnitRangeProcessor
- Stem
- Stopper
- SimpleStopper
- StemStopper
- TermGenerator
- TermIterator
- Utf8Iterator
- ValueIterator
- Weight
honey后端状态
此剩余的阻碍因素包括
- 向新的honey后端添加更新支持(以替换glass)
- 向honey添加对RAM存储的支持(以替换inmemory)
- 将一些远程客户端和服务器代码从libxapian中移出(或替换)
crate维护者文档
xapian GitHub仓库:https://github.com/xapian/xapian
在线用户指南:Xapian入门 https://getting-started-with-xapian.readthedocs.io/
Xapian开发者指南 https://xapian-developer-guide.readthedocs.io/
新版本新闻:https://lists.xapian.org/pipermail/xapian-discuss/2023-March/009961.html
Xapian API文档:https://xapian.org/docs/apidoc/
rust绑定
cxx教程 https://cxx.rs/tutorial.html
autocxx书籍 https://google.github.io/autocxx/
c ffi https://doc.rust-lang.net.cn/nomicon/ffi.html
使用cmake crate示例 https://eshard.com/posts/Rust-Cxx-interop
Rust和C++互操作性 https://sites.google.com/a/chromium.org/dev/Home/chromium-security/memory-safety/rust-and-c-interoperability
性能
32位docid
doc count: 31944, index doc took: 6251ms
使用--enable-log
构建将导致性能下降,约慢3倍。
检查日志是否启用: grep XAPIAN_DEBUG_LOG xapian-core/config.h
doc count: 31944, index doc took: 18154ms
故障排除
terminate called without an active exception
Process finished with exit code 134 (interrupted by signal 6: SIGABRT)
解决方案
在 C++ 代码中不要使用 Error e
,而是使用 const Xapian::Error& e
代替。
原因
Error
定义在 rust
命名空间下的生成文件 target/cxxbridge/rust/cxx.h
中。
使用 Xapian::Error
将解决问题。
xapian 调试
HACKING: XAPIAN_DEBUG_LOG=-
将输出发送到 stderr,而不是 stdout。
XAPIAN_DEBUG_FLAGS
IntelliJ IDEA
intellij-rust 与 cxx 相关的误报
请参阅 https://github.com/intellij-rust/intellij-rust/issues/8369#issuecomment-1362698416
cxx::bridge
是 属性宏 程序化宏。由于插件目前默认不展开它们,代码在从常规 Rust 角度看不允许的地方会有错误注解。例如,您不能在 extern 块内编写类型别名。但您可以通过org.rust.macros.proc.attr
实验性功能 启用属性宏的展开。之后,几乎所有东西都将按预期工作(除了 extern 块前的unsafe
注解)。启用实验性功能后,不要忘记 重新加载 项目模型。
有关详细信息,请参阅 #6908
文档
为什么不使用 docs.rs 来托管文档?
我们需要外部库来构建此 crate:libxapian
和 libclang
docs.rs 目前对这类需求不是很友好。
参考 https://docs.rs/about/builds#missing-dependencies
Docs.rs 依赖项通过 crates-build-env 管理。有关如何添加依赖项的说明,请参阅 Forge。
依赖项
~0.6–2.4MB
~39K SLoC