Skip to main content

An opinionated Solr integration for Plone

Project description

kitconcept GmbH

kitconcept.solr

An opinionated Solr integration for Plone

PyPI PyPI - Python Version PyPI - Wheel PyPI - License PyPI - Status

PyPI - Plone Versions

Meta Code Style

GitHub contributors GitHub Repo stars

Features

kitconcept.solr is an opinionated Solr integration package for Plone sites. It leverages (and depends on) collective.solr, by adding a new endpoint @solr that supports search requests with facetted results.

Endpoints

name context
@solr Plone site or Folderish content

Using the @solr endpoint

The @solr endpoint is used from the kitconcept.volto-solr Volto add-on package for the implementation of the site search. It can also be used for custom components. The parameters roughly follow the parameters of the normal site search service, but differ in some respects.

TBD give more information about this.

For now, please refer to the source code of the solr.py module, in case you want to use for your own purposes.

Documentation

Installation

Add kitconcept.solr as a dependency on your package's setup.py

    install_requires = [
        "kitconcept.solr",
        "Plone",
        "plone.restapi",
        "setuptools",
    ],

Also, add kitconcept.solr to your package's configure.zcml (or dependencies.zcml):

<include package="kitconcept.solr" />

Generic Setup

To automatically enable this package when your add-on is installed, add the following line inside the package's profiles/default/metadata.xml dependencies element:

    <dependency>profile-kitconcept.solr:default</dependency>

Source Code and Contributions

We welcome contributions to kitconcept.solr.

You can create an issue in the issue tracker, or contact a maintainer.

Development requirements

  • Python 3.8 or later
  • Docker

Setup

Install all development dependencies -- including Plone -- and create a new instance using:

make install

By default, we use the latest Plone version in the 6.x series.

Configurations

Most of the development configuration is managed with plone.meta, so avoid manually editing the following files:

  • .editorconfig
  • .flake8
  • .gitignore
  • .pre-commit-config.yaml
  • news/.changelog_template.jinja
  • pyproject.toml
  • tox.ini

In addition there is Solr related configuration that is outlined in the following chapters.

Configuring Solr

Solr is configured by a default configuration that can be found in the /solr/etc/ folder in this repository. This contains, most notably, the schema.xml that defines the indexes for Solr. This package also builds docker images with the default Solr version, set up with this default configuration.

If you need to customize the Solr configuration (such as adding new indexes, etc.) then you should copy the solr folder into your own project, customize it as you wish, and then build your own docker images (or compile your own Solr server) based on this configuration.

A typical use case for why you would want to do this, is if you add new fields to some content types, and you want to render the values for these additional fields in the search results. In this case you want to add the additional fields as indexes to Solr. You probably would not need this, unless you change anything on the result type templates in the kitconcept.volto-solr front-end package.

Configuring the front-end and back-end packages

The package supports the usage of the kitconcept.volto-solr add-on, and it is designed to be used together with it.

The configuration can be specified in a customized way. Without any additional configuration, the package will use the default, which is specified in json format in the kitconcept.solr.interfaces.IKitconceptSolrSettings registry.

This configuration settings affect the behavior of both the kitconcept.solr (this) back-end package, and the kitconcept.volto-solr front-end package (a Volto add-on). In addition, kitconcept.volto-solr has its own Volto add-on configuration which is not explained here, for these options please refer to the documentation of the add-on package.

Configuration options

Explanation for the configuration options:

fieldList

Contains the fields that solr should return. If the search result templates in the volto add-on are modified, and require more fields than in the default list, the fields must explicitly be added here.

In addition, the same fields must be present in the Solr index - if either the Solr index or the field in fieldList is missing, the field value will silently be not returned. No error will be shown.

Example value:

[
  "UID",
  "Title",
  "Description",
  "Type",
  "effective",
  "start",
  "created",
  "end",
  "path_string",
  "mime_type",
  "phone",
  "email",
  "location",
  "image_scales",
  "image_field"
]
searchTabs

A list of dictionary items representing the facet tabs in the search page.

The label field specifies the label to be shown on the tab in English. It's the front-end package's responsibility to provide translations for this, as kitconcept.volto-solr does this for the defaults, which can be used as an example.

The filter field defines the Solr search condition to the given facet tab. This can be a content type, or in fact any condition understood by Solr, please consult the Solr documentation for more details.

Example value:

[
  {
    "label": "All",
    "filter": "Type(*)"
  },
  {
    "label": "Pages",
    "filter": "Type:(Page)"
  },
  {
    "label": "Events",
    "filter": "Type:(Event)"
  },
  {
    "label": "Images",
    "filter": "Type:(Image)"
  },
  {
    "label": "Files",
    "filter": "Type:(File)"
  }
]
Overriding the configuration options

If needed, the default kitconcept.solr.interfaces.IKitconceptSolrSettings can be customized in the registry via GenericSetup.

Update translations

make i18n

Format codebase

make format

Run tests

Testing of this package is done with pytest and tox.

Run all tests with:

make test

Run all tests but stop on the first error and open a pdb session:

./bin/tox -e test -- -x --pdb

Run only tests that match TestEndpointEncoding:

./bin/tox -e test -- -k TestEndpointEncoding

Run only tests that match TestEndpointEncoding, but stop on the first error and open a pdb session:

./bin/tox -e test -- -k TestEndpointEncoding -x --pdb

Credits

The development of this add-on has been kindly sponsored by German Aerospace Center (DLR) and Forschungszentrum Jülich.

German Aerospace Center (DLR) Forschungszentrum Jülich

Developed by kitconcept

License

The project is licensed under GPLv2.

Changelog

1.0.0a3 (2023-08-15)

Documentation:

  • Add credits to README @tisto #16

1.0.0a2 (2023-08-15)

Bug fixes:

  • Increase version of collective.solr @reebalazs #14

1.0.0a1 (2023-08-11)

New features:

  • Generate ghcr.io/kitconcept/solr @reekitconcept #3

Internal:

  • Prepare package for release @ericof #5
  • Revamp solr configuration @reebalazs #12

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kitconcept.solr-1.0.0a3.tar.gz (76.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kitconcept.solr-1.0.0a3-py3-none-any.whl (31.1 kB view details)

Uploaded Python 3

File details

Details for the file kitconcept.solr-1.0.0a3.tar.gz.

File metadata

  • Download URL: kitconcept.solr-1.0.0a3.tar.gz
  • Upload date:
  • Size: 76.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for kitconcept.solr-1.0.0a3.tar.gz
Algorithm Hash digest
SHA256 fc8972f09a910385738d010813cfff9352ca10fd54c21d1f50f848806ec17ca0
MD5 a68ca4516d37a7ca10058ebbd65eb23a
BLAKE2b-256 9bfa71279c4939b3f90a4f19cf504d25b9a79b8d1aebf845cc15e0708a959752

See more details on using hashes here.

File details

Details for the file kitconcept.solr-1.0.0a3-py3-none-any.whl.

File metadata

File hashes

Hashes for kitconcept.solr-1.0.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 3c11aa693c069aa2630bc6d1fdfc95474a477efe2c00064b9034b80744d3d618
MD5 b1ee115d22005723a3c9567dc3cce733
BLAKE2b-256 f78484d13e8c6bbd41715aa5bfc75282e954ab266ccaf8a2803c85154bdc51f0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page