ElasticSearch提供了一种方法delete_by_query,我看到它在后端的 clear 方法上被调用:

self.conn.delete_by_query(index=self.index_name, doc_type='modelresult', body=query)

其中 query 是这样的:

{'query': {'query_string': {'query': "Model1 OR Model2"}}}

现在,我对 ElasticSearch 了解不多,我创建的索引如下:

class MyIndex(indexes.SearchIndex, indexes.Indexable):
    ...
    category = indexes.CharField(model_attr='category_id')
    ...

现在我想从索引中删除所有与 category=5 匹配的文档,我尝试了类似的东西:

backend.conn.delete_by_query(index='haystack', doc_type='modelresult', body= {'query': {'match': {'category': '5'}}})

并输出如下内容:

{'_ version':4,'created':False,'_ id':'_ declete_by_query','_ index':'haystack','_ type':'modelresult','_ shards':{'成功':1,'失败':0,'总':2}}

但它没有删除它,我认为我需要一个更好的查询,那么它会是什么?我还读到我可以使用 ElasticSearch 中的 bulk 方法 .

顺便说一下,我还检查过我可以从 SearchQuerySet 实例获得"query":

sqs.query.build_query()

这给了:

'category:(5)'

所以如果我能将 query 输出用于 delete_by_query 方法会非常有帮助,但我不知道如何使用它