我是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>]>
那么,会发生什么?
答案 0 :(得分:0)
你在标题上说出答案。 “非确定性”,首先您需要了解这是什么。非确定性算法可以为相同的输入获得不同的答案。但是为什么呢?
如果您还记得为什么我们使用非非确定性算法,您会找到解决方案。通常,非确定性算法需要比确定性更快,并且为此它们可以“推广”某些事物(如数学中的近似),并且这种推广可以导致不同的结果。但是,真的很快:)
详细了解Nondeterministic algorithms
编辑:也许elasticsearch或django-haystack有一些确定性搜索配置