2017-09-04 4 views
0

Je suis des résultats de tests fonctionnels retournés par django-haystack avec elasticsearch.Résultats non déterministes lors du test de hajack django avec elasticsearch

J'ai des résultats différents lors de l'exécution d'un test. Parfois, le test passe, parfois non.

Je n'arrive pas à comprendre pourquoi cela se produit.

Ma classe de test crée d'abord des entrées dans la base de données de test, puis appelle le manage.py rebuild_index à l'aide de la méthode setatic StaticLiveServerTestCase. À la fin, j'appelle le manage.py clear_index.

Je n'irai pas reproduire ici tout le code django pour les index de recherche, _text.txt car le code django-haystack/elasticsearch fonctionne.

Je me demande si c'est un problème de synchronisation entre les entrées de la base de données créées et l'appel à rebuild_index.

En fait, dans mes tests, je fais

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) 

Impression des objets indexés j'obtenir, parfois, les résultats incorrects:

<QuerySet [<Step: emg>]> 
<QuerySet [<Step: emg>]> 
<QuerySet [<Step: emg>]> 

et, parfois, les corriger:

<QuerySet [<Step: emg>]> 
<QuerySet [<Step: emg>]> 
<QuerySet [<Step: emg>]> 
<QuerySet [<Step: eeg>, <Step: emg>]> 
<QuerySet [<Step: eeg>, <Step: emg>]> 

Alors, que pourrait-il se passer?

Répondre

0

Vous dites la réponse au titre. "Non déterministe", vous devez d'abord comprendre ce que c'est. Les algorithmes non déterministes peuvent obtenir une réponse différente pour la même entrée. Mais pourquoi ça?

Si vous vous rappelez pourquoi nous utilisons des algorithmes non non déterministes, vous trouverez la solution. Les algorithmes non déterministes doivent être plus rapides que déterministes, en général, et pour cela ils peuvent "généraliser" certaines choses (comme l'approximation en maths) et cette généralisation peut aboutir à des résultats différents. Mais, est vraiment rapide :)

En savoir plus sur Nondeterministic algorithms

modifier: ElasticSearch peut-être ou django-botte de foin ont une configuration pour la recherche déterministe

+0

Merci pour avoir repplying @mcmartin. J'apprécie vos commentaires. Peut-être que je dois mettre plus de code pour mieux expliquer ce qui se passe. – Caco