2017-09-04 94 views
0

我是django-haystackelasticsearch返回的功能測試結果。用elasticsearch測試django乾草堆時的非確定性結果

運行測試時我有不同的結果。有時候測試通過,有時不會。

我不明白爲什麼會發生這種情況。

我的測試類首先在測試數據庫中創建條目,然後使用StaticLiveServerTestCase setUp方法調用manage.py rebuild_index。最後我打電話manage.py clear_index

我不會在這裏再現所有用於搜索索引的django代碼,因爲django-haystack/elasticsearch代碼正在工作,所以_text.txt的代碼。

我想知道是否創建的數據庫條目和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

你說標題的答案。 「非確定性」,首先你需要明白這是什麼。非確定性算法對於相同的輸入可以得到不同的答案。但爲什麼呢?

如果您還記得我們爲什麼使用非確定性算法,您可以找到解決方案。非確定性算法通常需要比確定性更快,爲此,他們可以「推廣」一些東西(如數學中的近似值),並且這種推廣可能導致不同的結果。但是,真的是快:)

瞭解更多關於Nondeterministic algorithms

編輯:也許elasticsearch或者Django的草垛有一些配置確定性搜索

+0

謝謝repplying @mcmartin。我感謝您的意見。也許我需要更多的代碼來更好地解釋發生的事情。 – Caco