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
方法会非常有帮助,但我不知道如何使用它