Tantiny Ruby 全文搜索引擎库开源项目

我要开发同款
白开水不加糖2022年06月30日
51阅读
开发技术RubyRust
所属分类搜索引擎、程序开发
授权协议MIT

作品详情

Tantiny是一个基于Tantivy的Ruby的最小化全文搜索库。当你手头的任务需要全文搜索,但配置一个完整的分布式搜索引擎会比任务本身花费更多的时间时,它是非常好的选择。

即使你已经在你的项目中使用了这样的引擎(实际上这是很有可能的),使用Tantiny仍然可能更容易,因为与Solr和Elasticsearch不同,它不需要任何东西来工作(没有单独的服务器或进程或其他什么),它是纯粹的可嵌入的。所以,当你发现自己在使用你所选择的搜索引擎会很麻烦/不方便,或者需要额外的设置时,你总是可以回到一个快速和肮脏的解决方案,但还是很灵活和快速。

Tantiny并不完全是对Tantivy的Ruby绑定,但它试图接近。主要理念是提供对Tantivy倒排索引的低级访问,但具有漂亮的Ruby风格的API、合理的默认设置和附加功能。

示例:

index=Tantiny::Index.new("/path/to/index"){text:description}index<<{id:1,description:"HelloWorld!"}index<<{id:2,description:"What'sup?"}index<<{id:3,description:"GoodbyeWorld!"}index.reloadindex.search("world")#1,3

Tantiny是线程安全的,这意味着你可以在线程之间安全地共享索引的单一实例。你还可以生成可以写入和读取同一索引的单独进程。然而,虽然从索引中读取应该是并行的,但向其写入却不是。每当你调用事务或任何其他修改索引的操作(即<<和删除),它将在操作期间锁定索引或等待另一个进程或线程释放锁定。唯一的例外是当另一个进程的索引具有独占编写器在某处运行时,在这种情况下修改索引的方法将立即失败。

因此,如果你想避免阻塞调用,最好是有一个写入进程和多个读取进程。正确的方法是在初始化索引时将exclusive_writer设置为true。

index=Tantiny::Index.new("/path/to/index",exclusive_writer:true){}

这样 indexwriter 只会被获取一次,这意味着它的内存和索引线程也只会被分配一次。否则每次执行写入操作时都会获取一个新的indexwriter。

查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论