--- myst: html_meta: "description": "" "property=og:description": "" "property=og:title": "" "keywords": "" --- # How Does collective.solr Work We used to depend on `collective.indexing` as a means to hook into the normal catalog machinery of Plone to detect content changes. Now the support for alternative indexes is part of `Products.CMFCore` (since version 2.2.12). However, to return results from solr via a catalog query a monkey patch is still required. ## Base Functionality - Patches the ZCatalog - Some queries are faster in Solr, some are not - Indexes and Metadata are duplicated - Full text search with SearchableText is handled by solr ## Transactions Solr is not transaction-aware and does not support any kind of rollback or undo. We therefore only send data to Solr at the end of any successful request. This is done via `Products.CMFCore.indexing`, a transaction manager and an end request transaction hook. This means you won’t see any changes done to content inside a request when doing Solr searches later on in the same request. ## Querying Solr With collective.solr ZCatalog Query: ``` catalog(SearchableText='Foo', portal_type='Document') ``` Result is a Solr response object. Direct Solr Queries: ``` from collective.solr.dispatcher import solrSearchResults solr_search = solrSearchResults( SearchableText=SearchableText, spellcheck='true', use_solr='true', ) ``` You can pass Solr query params directly to Solr and force a Solr response with ``` use_solr='true' ``` ## Mangler `collective.solr` has a mangleQuery function that translates / mangles ZCatalog query parameters to replace Zope specifics with equivalent constructs for Solr. ```{seealso} ```