Configuring brX Content Search Integration
Configuration
The Content Feed addon can generate full and delta content feeds automatically on a scheduled basis. For details on the differences between full and delta feeds, refer to the brSM Content Search documentation.
Info:
The Content Feed addon relies on dynamic bean generation when serializing Bloomreach Content content. Dynamic beans must remain enabled in your project. See Dynamic Content Beans for instructions on enabling dynamic beans.If your project uses the Taxonomy or Selections plugins, update the
annotated-classesparameter in the CMS webapp'sweb.xmlto include the appropriate classes. For example, to support taxonomy:<context-param> <param-name>hst-beans-annotated-classes</param-name> <param-value>classpath*:org/onehippo/taxonomy/**/.class</param-value> </context-param>
Configure Content Feed
When you install the addon, the following default configuration is bootstrapped under /hippo:configuration/hippo:modules/content-feed:
definitions: config: /hippo:configuration/hippo:modules/content-feed/hippo:moduleconfig/control: fullFeedTime: '01:00' /hippo:configuration/hippo:modules/content-feed/hippo:moduleconfig/metadata: feedCronExpression: 0 */5 * ? * * enabled: false includedPaths: [/content/documents] excludedDocumentTypes: ['resourcebundle:resourcebundle', 'robotstxt:section'] numberOfSiteWebapps : 1 referenceBeanDepthLimit: 2 referenceBeanTotalLimit: 50
The following tables describe each configuration parameter.
Section: control
| Parameter | Default value | Description |
|---|---|---|
fullFeedTime | 01:00 | Time of day when the daily full feed is triggered. |
maxFullFeedRetryCount | 3 | Number of retry attempts if delivery of the feed file fails. |
jobStatusRetryCount | 20 | Number of attempts to retrieve the status of feed send or feed create operations running on DataConnect. If the operation remains in running or queued status, the system retries every 30 seconds until this limit is reached. |
Section: metadata
| Parameter | Default value | Description |
|---|---|---|
feedCronExpression | 0 */5 * ? * * | CRON expression that defines the scheduling interval for delta feeds. See Quartz CRON format for details. |
enabled | false | Enables or disables the content feed service. Set to true to activate the service. For blue-green deployments, enable the service only in the active production environment and disable it in the standby environment. |
includedPaths | [/content/documents] | List of JCR paths where the content feed service searches for documents to include in the search index. |
excludedDocumentTypes | ['resourcebundle:resourcebundle', 'robotstxt:section'] | List of document types to exclude from the content feed. |
numberOfSiteWebapps | 1 | Number of site webapps that must be registered before feed execution starts. |
referenceBeanDepthLimit | 2 | Maximum depth for including values from linked documents. A value of 2 includes documents referenced up to two steps away from the current document. Set to 1 to include only directly referenced documents. |
referenceBeanTotalLimit | 50 | Maximum number of referenced documents to include, subject to the depth limit. Referenced documents that exceed the depth limit are not included, regardless of this value. |
Configure Environment-Specific Properties
Add the following properties to an environment-specific HST properties file for the CMS or platform, such as the CMS webapp's hst-config.properties. For details, see HST container configuration documentation.
brx.contentfeed.environment = dev-localhost
- Set this property to the HST host group that serves live content.
- Use the host group that matches the target Bloomreach Content environment (for example,
prodorstaging). - This ensures that generated links in content search results are appropriate for the environment.
Configure DataConnect Feed Transfer
Configure the destination for the content feed. The addon delivers the feed to brSM using an SFTP connection. You must provide an SSH key pair unique to your brSM account.
brx.dataconnect.transfer.connection.host = sftp-staging.connect.bloomreach.com (staging) or sftp.connect.bloomreach.com (production)
[Host of the SFTP server]
brx.dataconnect.transfer.connection.port = 22
[Port of the SFTP server]
brx.dataconnect.transfer.connection.username =
[SFTP account username, provided by Bloomreach]
brx.dataconnect.transfer.connection.location = home/<username>
[Remote SFTP directory. The path must start with /home and include the username.]
brx.dataconnect.transfer.connection.privatekeypath =
[File path to the private key for authentication (e.g. ${brc.appconfigpath}/id_rsa.properties). See notes below for key configuration and format.]
brx.dataconnect.transfer.connection.privatekeypassphrase = [Passphrase for the private key, if required.]
brx.dataconnect.transfer.connection.serverhostkey =
AAAAB3NzaC1yc2EAAAADAQABAAABAQCBaNJJwEuhk4QxT4BWqPcsDvbaAR6JWB/Ypq/RV+nifYyBRplhfrgwGtr5EFKM2xK/yo0qO0uSYE8uBiaGAFefJ/f1tNMmwqMdVvp9oWLSvH1e+gqHGqubSKazUCX6AKXJ1ZPw+uG9lM267OwIKTvM8iKteXCafNRvY04bh3oCejWu9Djiu44BaTIjIl4QV9qKLm+lTa4vxvDZPGJDKOIfbuHEFz0H2vXOT478g+C4nojDAsZxbU6mAs/Bqa81BsZKHZiNK0UvYJvtIr0y3f0FFUR6JBUoHY4q0RLw+Mit7DenuGIJdw/t1nDEIikAQ8eGcseZcx+vvh/PmayDtdlh
[Public host key of the SFTP server]
brx.dataconnect.transfer.connection.connect.timeout = 60
[Timeout (in seconds) for establishing the SFTP connection. If the connection is not established within this period, feed execution fails.]
For instructions on configuring a private key in a cloud environment, see Set Environment Configuration Properties. The private key file must use the .properties extension (for example, id_rsa.properties). The provided value for brx.dataconnect.transfer.connection.serverhostkey is the public key for the Bloomreach production server. If you use a different server or environment, contact your Bloomreach representative for the correct host key.
The Content Feed SFTP connection supports RSA-type SSH private keys and some other types, but does not support OpenSSH private keys. On recent Linux and macOS systems, the ssh-keygen command may generate OpenSSH keys by default. To check your key type, inspect the first line of the private key file:
- OpenSSH keys start with
-----BEGIN OPENSSH PRIVATE KEY----- - RSA keys start with
-----BEGIN RSA PRIVATE KEY-----
To generate a new RSA private key:
ssh-keygen -t rsa
To convert an existing OpenSSH private key to RSA format:
ssh-keygen -p -N <your_new_password> -m pem -f <path-of-your-private-key>
The RSA private key should not be passphrase-protected. If your key is protected, create an unencrypted copy with:
openssl rsa -in <original_private_key_file> -out <new_unencrypted_private_key_file>
Configure DataConnect API
To enable feed generation, configure the client for brSM’s DataConnect API. The DataConnect API triggers creation of a new content search index from an uploaded content feed. Bloomreach Support will provide the required values.
brx.dataconnect.api.baseurl =
https://api-staging.connect.bloomreach.com/dataconnect/api/v1/ (staging) or
https://api.connect.bloomreach.com/dataconnect/api/v1/ (production)
[DataConnect service URL]
brx.dataconnect.api.key = [your DataConnect API key]
brx.dataconnect.accountId = [your brSM account ID]
brx.dataconnect.catalog = [your brSM catalog name]
Configure Query API
Configure the following properties in the site webapp's hst-config.properties to enable access to the brX Content Search API.
brx.search.uri: [your brSM search API endpoint]
brx.search.accountId: [your brSM account ID]
brx.search.cache.enabled: false
brx.search.catalogs: [your SM catalogs (comma separated)]
Database Journal Entry Cleanup
When the Content Feed module is enabled, it creates an entry with the key _HIPPO_EXTERNAL_REPO_SYNC_contentFeedExporter in the REPOSITORY_LOCAL_REVISIONS database table. This entry tracks the revision ID of the last successful content export. It prevents the REPOSITORY_JOURNAL table from being cleaned up beyond this revision during Repository Maintenance operations, ensuring that unprocessed changes are not lost.
Important:
If you remove the Content Feed module from your project, this database entry is not deleted automatically. You must remove it manually to prevent orphaned records from blocking journal cleanup:
DELETE FROM REPOSITORY_LOCAL_REVISIONS
WHERE JOURNAL_ID = '_HIPPO_EXTERNAL_REPO_SYNC_contentFeedExporter';