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,':False,' _id':' _delete_by_query',' _index&# 39;:' haystack',' _type&#39 ;:' modelresult',' _shards':{'成功':1 ,'失败':0,'总计':2}}
但它没有删除它,我认为我需要一个更好的查询,那么它会是什么?我还读到我可以使用bulk
中的ElasticSearch
方法。
顺便说一下,我还检查过我可以得到一个"查询"来自SearchQuerySet
实例:
sqs.query.build_query()
给出:
'category:(5)'
因此,如果我可以使用query
方法的delete_by_query
输出,但我不知道如何使用它会非常有用