【问题标题】:Non-deterministic results when testing django haystack with elasticsearch使用 elasticsearch 测试 django haystack 时的非确定性结果
【发布时间】:2018-02-13 01:02:44
【问题描述】:

我是django-haystackelasticsearch 返回的功能测试结果。

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

我不知道为什么会这样。

我的测试类首先在测试数据库中创建条目,然后调用manage.py rebuild_index,使用StaticLiveServerTestCase setUp 方法。最后我打电话给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>]>

那么,会发生什么?

【问题讨论】:

    标签: python django elasticsearch django-haystack


    【解决方案1】:

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

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

    阅读更多关于Nondeterministic algorithms

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

    【讨论】:

    • 感谢您回复@mcmartin。我很欣赏你的cmets。也许我必须添加更多代码来更好地解释正在发生的事情。
    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多