序列化Haystack SearchQuerySet

时间:2016-10-11 20:37:54

标签: python django elasticsearch django-haystack

我将一些Django查询转储到延迟的文件中,因此我将其作为参数sql_with_params传递给稍后在延迟的raw查询中执行。

我已将所有查询迁移到haystack,因此我不想对SearchQuerySet执行相同操作。

有没有办法获取已经构建的SearchQuerySet的raw_query?

PD:我正在使用ElasticSearch

1 个答案:

答案 0 :(得分:0)

当然,这是一种不幸需要一点管道的方法。您可以创建自定义搜索引擎,并将其查询设置为继承自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

并从您的设置中引用:

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