我是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>]>
那么,会发生什么呢?
你在标题上说答案。">非确定性",首先你需要了解这是什么。对于相同的输入,非确定性算法可以得到不同的答案。但为什么呢?
如果您还记得我们为什么使用非确定性算法,您就会找到解决方案。一般来说,非确定性算法需要比确定性算法更快,为此它们可以"概括"一些东西(如数学中的近似),这种泛化可能会导致不同的结果。但是,真的很快:)
阅读更多 关于 非确定性算法
编辑:也许Elasticsearch或Django-Haystack有一些用于确定性搜索的配置