File tree 2 files changed +17
-2
lines changed
2 files changed +17
-2
lines changed Original file line number Diff line number Diff line change @@ -1119,11 +1119,18 @@ def delete(
1119
1119
else :
1120
1120
doc_id = list (filter (None , id ))
1121
1121
if doc_id :
1122
- m = "<delete>%s</delete>" % "" .join ("<id>%s</id>" % i for i in doc_id )
1122
+ et = ElementTree .Element ("delete" )
1123
+ for one_doc_id in doc_id :
1124
+ subelem = ElementTree .SubElement (et , 'id' )
1125
+ subelem .text = one_doc_id
1126
+ m = ElementTree .tostring (et )
1123
1127
else :
1124
1128
raise ValueError ("The list of documents to delete was empty." )
1125
1129
elif q is not None :
1126
- m = "<delete><query>%s</query></delete>" % q
1130
+ et = ElementTree .Element ("delete" )
1131
+ subelem = ElementTree .SubElement (et , 'query' )
1132
+ subelem .text = q
1133
+ m = ElementTree .tostring (et )
1127
1134
1128
1135
return self ._update (
1129
1136
m ,
Original file line number Diff line number Diff line change @@ -909,6 +909,14 @@ def test_delete(self):
909
909
self .assertEqual (len (self .solr .search ("type_s:grandchild" )), 1 )
910
910
self .solr .delete (q = "price:[0 TO 15]" )
911
911
self .solr .delete (q = "type_s:parent" , commit = True )
912
+
913
+ # Test a query that would need to be quoted when using the XML API.
914
+ # Ids with a "<" character will give an error using v3.9.0 or earlier
915
+ self .solr .delete (id = 'cats<dogs' )
916
+ # These will delete too much when using v3.9.0 or earlier.
917
+ self .solr .delete (q = 'id:*</query><query> id:999 AND id:9999' )
918
+ self .solr .delete (id = 'doc_4</id><id>doc_3' , commit = True )
919
+
912
920
# one simple doc should remain
913
921
# parent documents were also deleted but children remain as orphans
914
922
self .assertEqual (len (self .solr .search ("doc" )), 1 )
You can’t perform that action at this time.
0 commit comments