Skip to content

Commit fea6e96

Browse files
committed
Add support to delete docs through Solr interface.
Works for both IDs and queries.
1 parent dcb80af commit fea6e96

2 files changed

Lines changed: 50 additions & 2 deletions

File tree

riak/search.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,31 @@ def add(self, index, *docs):
4343
self._transport.post_request(uri=url, body=xml.toxml(),
4444
content_type="text/xml")
4545

46-
def delete(self, doc):
47-
pass
46+
index = add
47+
48+
def delete(self, index, docs=None, queries=None):
49+
xml = Document()
50+
root = xml.createElement('delete')
51+
if docs:
52+
for doc in docs:
53+
doc_element = xml.createElement('id')
54+
text = xml.createTextNode(doc)
55+
doc_element.appendChild(text)
56+
root.appendChild(doc_element)
57+
if queries:
58+
for query in queries:
59+
query_element = xml.createElement('query')
60+
text = xml.createTextNode(query)
61+
query_element.appendChild(text)
62+
root.appendChild(query_element)
63+
64+
xml.appendChild(root)
65+
66+
url = "/solr/%s/update" % index
67+
self._transport.post_request(uri=url, body=xml.toxml(),
68+
content_type="text/xml")
69+
70+
remove = delete
4871

4972
def search(self, index, query, **params):
5073
options = {'q': query, 'wt': 'json'}
@@ -53,3 +76,5 @@ def search(self, index, query, **params):
5376
headers, results = self._transport.get_request(uri, options)
5477
decoder = self.get_decoder(headers['content-type'])
5578
return decoder(results)
79+
80+
select = search

riak/tests/test_all.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,29 @@ def test_add_multiple_documents_to_index(self):
792792
results = self.client.solr().search("searchbucket", "username:russell OR username:dizzy")
793793
self.assertEquals(2, len(results["response"]["docs"]))
794794

795+
def test_delete_documents_from_search_by_id(self):
796+
if SKIP_SEARCH:
797+
return True
798+
self.client.solr().add("searchbucket", {"id": "dizzy", "username": "dizzy"}, {"id": "russell", "username": "russell"})
799+
self.client.solr().delete("searchbucket", docs=["dizzy"])
800+
results = self.client.solr().search("searchbucket", "username:russell OR username:dizzy")
801+
self.assertEquals(1, len(results["response"]["docs"]))
802+
803+
def test_delete_documents_from_search_by_query(self):
804+
if SKIP_SEARCH:
805+
return True
806+
self.client.solr().add("searchbucket", {"id": "dizzy", "username": "dizzy"}, {"id": "russell", "username": "russell"})
807+
self.client.solr().delete("searchbucket", queries=["username:dizzy", "username:russell"])
808+
results = self.client.solr().search("searchbucket", "username:russell OR username:dizzy")
809+
self.assertEquals(0, len(results["response"]["docs"]))
810+
811+
def test_delete_documents_from_search_by_query_and_id(self):
812+
if SKIP_SEARCH:
813+
return True
814+
self.client.solr().add("searchbucket", {"id": "dizzy", "username": "dizzy"}, {"id": "russell", "username": "russell"})
815+
self.client.solr().delete("searchbucket", docs=["dizzy"], queries=["username:russell"])
816+
results = self.client.solr().search("searchbucket", "username:russell OR username:dizzy")
817+
self.assertEquals(0, len(results["response"]["docs"]))
795818

796819
class RiakHttpPoolTransportTestCase(BaseTestCase, MapReduceAliasTestMixIn, unittest.TestCase):
797820

0 commit comments

Comments
 (0)