如何从 LDAP 将数据导入 Apache Solr 索引

How to import data into Apache Solr index from LDAP

我有一个包含大量用户数据的 LDAP 服务器,我想将其导入到 Apache Solr 索引中。问题不在于这是否是个好主意(正如所讨论的 here)。我需要这种架构,因为我们的生产系统之一依赖于我们的 ldap 数据的 Solr 索引。

我正在考虑这样做的不同选项,但我不确定应该首选哪一个:

选项 1:使用 Apache Solr DataImportHandler

这似乎是最直接的 Solr 方式。不幸的是,似乎没有可用于 LDAP 的数据源。

我尝试将 JdbcDataSource 与 JDBC-LDAP-Bridge 结合起来。理论上可能可行,但驱动程序看起来很过时(2007 年的最新版本)。

另一种选择可能是使用一些 LDAP 库为 Java 编写自定义 LdapDataSource(可能 Spring LDAP,直接通过 JNDI 或类似的东西?)。

选项 2:构建自定义 Feeder:

另一种选择可能是编写一个独立的 service/script 在两个服务之间架起桥梁。不过,这感觉有点像重新发明轮子。

选项3:我还没有想到的东西:

也许这里还有我尚未发现的其他选项。

通过为 Solr DataImportHandler 编写自定义 LDAP 数据源解决了这个问题。

并不像听起来那么难。 JdbcDataSource 可以用作编写自定义数据源的模板,因此基本上您只需为 LDAP 协议重写 Java-Class。

访问 LDAP-Client 有很多选项,例如纯 JNDI、UnboundID LDAP SDK、Apache LDAP API、OpenDJ LDAP SDK 或 OpenLDAP JLDAP(可能还有更多,但我只看了一眼在那些)。

我选择了 UnboundID LDAP,因为它有据可查 API 并且完全支持 LDAPv3。

之后只需从数据中引用数据源即可-config.xml。

此设置的一个很好的副作用是,您可以在索引 LDAP 服务器(实体处理器和转换器)时使用 Solr DataImportHandler 提供的所有好东西。这使得在 LDAP 和 Solr 索引之间映射数据结构变得容易。