3个版本

0.1.5 2023年6月11日
0.1.4 2023年6月4日
0.1.3 2023年6月4日

#1506 in 数据库接口

每月21次下载

MIT 许可证

71KB
1K SLoC

Rust 736 SLoC // 0.4% comments C++ 307 SLoC // 0.1% comments Shell 1 SLoC

xapian-rs

crates.io docs downloads latest version downloads

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://xapian.org/docs/

新版本新闻: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 注解)。

image

启用实验性功能后,不要忘记 重新加载 项目模型。

有关详细信息,请参阅 #6908

文档

为什么不使用 docs.rs 来托管文档?

我们需要外部库来构建此 crate:libxapianlibclang

docs.rs 目前对这类需求不是很友好。

参考 https://docs.rs/about/builds#missing-dependencies

Docs.rs 依赖项通过 crates-build-env 管理。有关如何添加依赖项的说明,请参阅 Forge

依赖项

~0.6–2.4MB
~39K SLoC