2016-10-11 2 views
0

J'ai certaines requêtes Django déversées dans des fichiers qui sont retardés, donc je passe comme paramètre sql_with_params pour exécuter plus tard dans la requête raw retardée. J'ai migré toutes les requêtes à haystack donc je ne vais pas faire la même chose avec SearchQuerySet.Serialize Haystack SearchQuerySet

Est-il possible d'obtenir la requête raw d'un SearchQuerySet déjà construit?

PD: J'utilise ElasticSearch

Répondre

0

Bien sûr, voici une façon qui nécessite malheureusement un peu de plomberie. Vous pouvez créer un moteur de recherche personnalisé et définir sa requête à votre propre définition de la requête héritant de ElasticsearchSearchQuery:

from haystack.backends.elasticsearch_backend import ElasticsearchSearchEngine, ElasticsearchSearchQuery 


class ExtendedElasticsearchSearchQuery(ElasticsearchSearchQuery): 
    def build_query(self): 
     raw_query = super(ExtendedElasticsearchSearchQuery, self).build_query() 
     # TODO: Do something with raw query 
     return raw_query 

class ExtendedElasticsearchSearchEngine(ElasticsearchSearchEngine): 
    query = ExtendedElasticsearchSearchQuery 

et référence de vos paramètres:

HAYSTACK_CONNECTIONS = { 
    'default': { 
     'ENGINE': 'myapp.mymodule.ExtendedElasticsearchSearchEngine', 
     'URL': 'http://localhost:9200/', 
     'INDEX_NAME': 'haystack' 
    }, 
}