使用 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>]>

那么,会发生什么呢?

你在标题上说答案。">非确定性",首先你需要了解这是什么。对于相同的输入,非确定性算法可以得到不同的答案。但为什么呢?

如果您还记得我们为什么使用非确定性算法,您就会找到解决方案。一般来说,非确定性算法需要比确定性算法更快,为此它们可以"概括"一些东西(如数学中的近似),这种泛化可能会导致不同的结果。但是,真的很快:)

阅读更多 关于 非确定性算法

编辑:也许Elasticsearch或Django-Haystack有一些用于确定性搜索的配置

最新更新