Source code for parasolr.solr.update

import json
from typing import Any, Optional, Union
from urllib.parse import urljoin

import requests

from parasolr.solr.client import ClientBase


[docs]class Update(ClientBase): """API client for Solr update functionality. Args: solr_url: Base url for Solr. handler: Handler for Update API. session: A python-requests :class:`requests.Session`. """ def __init__( self, solr_url: str, collection: str, handler: str, commitWithin: int, session: Optional[requests.Session] = None, ) -> None: # Go ahead and create a session if one is not passed in super().__init__(session=session) self.url = self.build_url(solr_url, collection, handler) self.headers = {"Content-Type": "application/json"} self.params = {"commitWithin": commitWithin}
[docs] def index( self, docs: list, commit: bool = False, commitWithin: Optional[int] = None ) -> None: """Index a document or documents, by default with a soft commit. Args: docs (list): list of :class:`dict` objects to index. commit (bool, optional): Whether or not to make a hard commit to the index. commitWithin (int, optional): Override default commitWithin for soft commits. """ params = self.params.copy() if commitWithin: params["commitWithin"] = commitWithin # perform a hard commit, so remove commitWithin as superfluous # and set params. if commit: del params["commitWithin"] params["commit"] = True url = urljoin("%s/" % self.url, "json/docs") self.make_request("post", url, data=docs, params=params, headers=self.headers)
[docs] def _delete(self, del_obj: Union[dict, list]) -> None: """Private method to pass a delete object to the update handler. Args: del_obj: Object to be serialized into valid JSON for Solr delete. """ data = {"delete": del_obj} self.make_request( "post", self.url, data=data, params=self.params, headers=self.headers )
[docs] def delete_by_id(self, id_list: list) -> None: """Delete documents by id field. Args: id_list: A list of ids. """ self._delete(id_list)
[docs] def delete_by_query(self, query: str) -> None: """Delete documents by an arbitrary search query. Args: query: Any valid Solr query. """ self._delete({"query": query})