我有一个包含大量用户数据的LDAP服务器,并希望将其导入Apache Solr索引。问题不在于这是否是一个好主意(如here所述)。我需要这种架构,因为我们的生产系统之一取决于我们的ldap数据的Solr索引。
我正在考虑不同的选择,但我不确定应该选择哪一个:
选项1:使用Apache Solr DataImportHandler:
这似乎是最直接的Solr方式。不幸的是,似乎没有可用于LDAP的DataSource。
我尝试将JdbcDataSource与JDBC-LDAP-Bridge结合起来。从理论上讲,它可能会起作用但驱动程序看起来很过时(2007年的最新版本)。
另一个选项可能是使用某些LDAP-Libraries for Java(可能是Spring LDAP,直接通过JNDI或类似的东西来编写自定义LdapDataSource。)。
选项2:构建自定义Feedr:
另一种选择可能是编写一个在两个服务之间桥接的独立服务/脚本。然而,感觉有点像重新发明轮子。
选项3:我还没有想到的东西:
也许还有其他选项,我还没有发现。
答案 0 :(得分:2)
通过为Solr DataImportHandler编写自定义LDAP数据源解决了这个问题。
它并不像听起来那么难。 JdbcDataSource可以用作编写自定义DataSource的模板,所以基本上你只需要为LDAP协议重写一个Java-Class。
为了访问LDAP-Client,有很多选项,例如普通JNDI,UnboundID LDAP SDK,Apache LDAP API,OpenDJ LDAP SDK或OpenLDAP JLDAP(可能还有更多,但我只看了一下)。
我选择了UnboundID LDAP,因为它有充分的文档API和对LDAPv3的完全支持。
之后只需从data-config.xml引用数据源即可。
此设置的一个很好的副作用是,您可以使用Solr DataImportHandler在索引LDAP服务器(实体处理器和变换器)时提供的所有好东西。这样可以轻松地在LDAP和Solr索引之间映射数据结构。