2011-12-28 53 views
0

我有一个MySQL数据库与PHP前端。我想实现搜索功能,但我有一些独特的情况,需要一些建议才能继续。Lucene或Solr用于索引MySQL数据库数据,其中一些数据不能公开

我的雇主拥有大量的档案研究资料。某些馆藏的元数据和数据以数字格式提供,但由于捐助协议或版权问题,并非所有数字数据都可以通过互联网访问。在互联网上不允许使用数字数据的情况下,人们可能会实际访问我们的建筑物并查看信息。现在,每个数字收藏都有自己的数据库,但我们正在将所有内容整合到一个数据库中,以便顾客可以同时搜索所有收藏。

这是我的理解,如果我使用Solr进行索引和搜索,信息通过HTTP在Tomcat上运行的Solr实例与客户端之间传输,并且可能会暴露不应该公开的数据。为了避免这个问题,我认为在服务器上直接使用Lucene来生成索引,然后以某种方式直接在同一台服务器上从PHP访问它会是一个更好的主意。我的问题是(1)我对情况的评估是否正确; (2)如果不是,它是如何工作的?我知道Java。谢谢。

回答

2

通过HTTP传输数据并公开访问该数据是两个完全不同的问题。您可以让一台Solr服务器在全球一半的物理机器上运行,并对其进行配置,以便只能从您明确允许的某台特定机器访问它。尽管您可能会在运行应用程序的同一台计算机上运行Solr服务器,并将服务器的防火墙/端口/路由设置配置为仅允许公共访问您的应用程序,而不是Solr服务器。这对于选择其中一个而言并不重要,只是一个配置问题。

1

如果您担心将数据从Solr传输到MySQL,您可以只将字段设置为“索引”,而不是“存储”。通过这种方式,您可以查询它们,但不能读取它们的内容,另外按照建议只允许从受信任的机器(PHP客户端)访问Solr。

Solr并不是很擅长生成带有字段内容的大型XML或JSON响应,因此只需询问(和存储)您真正需要的内容(即只记录数据库记录的id,然后从数据库本身获取其余内容)。 这样你就会有快速的反应,对其他人来说是无用的(在信息泄露的情况下)并且索引会更小。