使用elasticsearch测试django haystack时的非确定性结果

时间:2017-09-04 19:22:42

标签: python django elasticsearch django-haystack

我是django-haystack使用elasticsearch返回的功能测试结果。

我在运行测试时遇到了不同的结果。有时测试通过,有时它没有。

我无法弄清楚为什么会这样。

我的测试类首先在测试数据库中创建条目,然后使用StaticLiveServerTestCase setUp方法调用manage.py rebuild_index。最后,我致电manage.py clear_index

我不会在这里重现搜索索引的所有django代码,_ text.txt,因为django-haystack / elasticsearch代码正在运行。

我想知道创建的数据库条目与rebuild_index的调用之间是否存在同步问题。

基本上,在我的测试中,我这样做

class SearchTest(FunctionalTest):

    def setUp(self):
        super(SearchTest, self).setUp()  # this make the entries in database
        self.rebuild_index()

    def tearDown(self):
        super(SearchTest, self).tearDown()
        call_command('clear_index', interactive=False)

打印索引的对象,有时会得到错误的结果:

<QuerySet [<Step: emg>]>
<QuerySet [<Step: emg>]>
<QuerySet [<Step: emg>]>

有时是正确的:

<QuerySet [<Step: emg>]>
<QuerySet [<Step: emg>]>
<QuerySet [<Step: emg>]>
<QuerySet [<Step: eeg>, <Step: emg>]>
<QuerySet [<Step: eeg>, <Step: emg>]>

那么,会发生什么?

1 个答案:

答案 0 :(得分:0)

你在标题上说出答案。 “非确定性”,首先您需要了解这是什么。非确定性算法可以为相同的输入获得不同的答案。但是为什么呢?

如果您还记得为什么我们使用非非确定性算法,您会找到解决方案。通常,非确定性算法需要比确定性更快,并且为此它们可以“推广”某些事物(如数学中的近似),并且这种推广可以导致不同的结果。但是,真的很快:)

详细了解Nondeterministic algorithms

编辑:也许elasticsearch或django-haystack有一些确定性搜索配置