7

我们需要控制生产 solr 索引中的数据,并且需要它与新开发兼容。理想情况下,我们想在本地机器上模拟索引,用它查询 solr 并编写单元测试来查询它以获得更快的迭代。

RamDirectory 在另一个问题中用于做类似的事情,但问题是从 2 年前开始的。这个例子似乎就是这样做的(使用 FSDirectory 而不是 RamDirectory)。这些是解决这个问题的正确方法吗?有没有更好的方法来做到这一点?

我们想编写如下测试:

setup mock index;
query mock index;
assert(stuff that should be true);
teardown mock index;

编辑:附加细节:

我们的想法是我们会建立一个索引,有一种简单的方法来添加文档,而不需要索引器和系统的其余部分,除了我们可以保留在版本控制中的本地数据库。过去我们生成一个索引,当出现不兼容时,我们重新生成它。

如果我们重新索引,我们会增加很多开销,并且模拟索引器似乎不是一个好的选择,因为我们的索引器包含大量数据处理逻辑(比如将数据添加到数据库中的可搜索字段) . 我们的索引器连接到外部数据库,因此我们也需要支持它。我们可以有一个如上所述的本地测试数据库,它几乎没有开销。

一旦我们有一个测试数据库,我们需要建立一个索引,然后我们可以离开上面的第二个链接。问题变成了我们如何真正快速地构建索引以进行测试,比如 1000 个文档。

这样做的问题是,我们需要让我们的本地数据库模式与生产模式保持同步。生产模式经常变化,这是一个问题。我们希望有一个足够灵活的测试基础设施来处理这个问题——目前的方法是每次都重建数据库,这很慢而且会惹恼其他人!

4

1 回答 1

5

如果您使用 Solr,我什至不会为模拟或模拟而烦恼(即不要更改其配置)。

而是编写一个集成测试来设置您的 solr 索引。设置将只是像往常一样索引数据。您可能希望您的开发人员运行他们自己的 solr。

我不会太担心速度,因为 solr 索引的速度非常快(我们的环境在不到 30 秒的时间内 100,000 个文档......事实上瓶颈正在从数据库中提取数据)。

所以实际上,您的模拟索引应该只是您将索引到 solr 中的生产数据的一小部分(您可以使用 @BeforeClass 为每个 TestCase 类执行一次)。

编辑(基于您的编辑):

我会告诉你我们是如何做到的(以及我看到其他人是如何做到的):

我们有一个开发模式/db 和生产模式/db。当开发人员在工作时,他们只需复制“构建机器”开发数据库并在本地恢复它。该数据库比生产数据库小得多,非常适合测试。您的生产数据库不应与您的开发数据库模式有太大不同(如果是这种情况,请进行较小的更改并更频繁地发布。)

于 2011-07-27T20:29:10.210 回答