【问题标题】:Lucene JDBC DirectoryLucene JDBC 目录
【发布时间】:2012-01-23 05:48:14
【问题描述】:

我正在使用 Lucene 3.5.0 在我的网站上做一些基本的搜索工作。我想将索引存储在 Mysql 数据库的 JDBC 目录中。我打算使用 Compass 项目来执行此操作,但经过更多研究并实际尝试了代码,我发现 Compass 是一个死项目,它不再与当前版本的 Lucene 兼容。

还有其他选项可以将我的索引存储在 JDBC 目录中吗? Lucene 不提供这个原生是有原因的吗?出于某种原因,在 HDD 上存储是更好的选择吗?

【问题讨论】:

  • 什么是 JDBC 目录?为什么要将它放在数据库中?
  • JDBC Directory 是 Compass 用来在数据库中创建表来存储索引的方法。老实说,我想解决这个问题,因为它看起来更容易,除了我无法让它工作之外,似乎存储索引数据库的最佳位置是在数据库本身中。如果目录是更好的选择,我可以相信否则。
  • 啊,我误会了;谢谢。不过,不确定如何更容易。此外,数据库索引和操作似乎会针对不同类型的问题进行调整。
  • Compass 项目中的 JDBCDirectory 实现仍然运行良好(在现代 Java 中)。为一项新服务实施,并对这些选项印象深刻。不过,请注意在数据库层完成的默认锁定实现。因此,它似乎有无数的问题,即废弃的锁和更新时系统无法访问。但是,通过实施单写策略(自己锁定)是一种配置选项并解决了问题。

标签: java lucene


【解决方案1】:

来自FAQ

Lucene 不支持开箱即用的功能,但有几个人已经实现了JdbcDirectory's。到目前为止,我们看到的报告表明,这种实现的性能不是很好,但它是可行的。

另一种方法是将索引作为 BLOB 存储在数据库中,如果您有多个节点运行您的应用程序,这可能会很有用。如果为 BLOB 添加时间戳,每个节点都可以检查索引是否已更新并从数据库中重新创建索引文件。

【讨论】:

  • 我可以麻烦您举一个如何将索引存储为 BLOB 的示例吗?我以前从未这样做过,也不知道如何从 Lucene 实现它。
  • @ryandlf 参见例如stackoverflow.com/questions/939673/… 使用休眠时,您只需读取文件并将其内容存储在字节数组中。
  • 好的,不确定它是否会这么简单,但我会调查一下。 Lucene 每次索引数据库时都会创建许多不同的文件。
  • 你不是很清楚应该存储哪些文件
  • 请注意,“将索引作为 BLOB 存储在数据库中”不会有任何直接的文件系统交互。的确,这就是重点。文件系统对可更新索引的锁定很差/有问题。当然,任何数据库都会有一个 FS 实现,但索引本身将由 [JDBCDirectory] ​​代码通过数据库维护,并具有关联的(更好的)数据库记录锁定,这样每个 BLOB 都是具有主键的记录。请参阅 Compass 项目(尽管已过时且与 Lucene 4.x 不兼容)。
【解决方案2】:

这里有3个问题,违反论坛问答格式,我会尽量回答:

问:“还有其他选项可以将我的索引存储在 JDBC 目录中[与 Lucene 4.x 兼容]?”

A:“Google 搜索……但没有,没有广泛使用。大多数开发人员已经转向 ElasticSearch,它将许多方面捆绑到一个更大的包中。可悲的是,JDBC 与许多 K/V 数据库一样,正在消亡有趣的是,从文件系统到非事务支持的 K/V 数据库……由于不可靠的操作系统文件锁定或缺乏 ACID 保证,这些解决方案实际上都不适用于分布式可更新索引。

问:“Lucene 不提供这个原生是有原因的吗?”

A:“询问 Lucene 的贡献者,但是……在阅读他们的文档时,他们再次转向了基于 ElasticSearch、REST API 和通常与语言无关的实现的更全面和商业化的解决方案(而 Lucene 是底层 Java - 可以追溯到几十年前的本地实现)。

问:“出于某种原因,在 HDD 上存储是更好的选择吗?”

A:“一般不推荐,因为可更新索引的操作系统文件锁定不可靠和非分发支持(设想多个进程和节点尝试同时更新相同的索引文件)。甚至 AWS S3 也被证明为不支持由于缺乏锁定并且需要有效地删除和重新创建 S3 对象以有效地完成任务,因此可用于此目的。

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    相关资源
    最近更新 更多