Federated Search tab

Overview
This tab is where the Administrator configures federated search
To Access
From the Search page, click the Federated Search tab.



Option Description Default
Federated search Search through alternate site indices.
Elasticsearch or Manticore Search is required
Disabled
Elasticsearch tribe node URL URL of the tribe client node accessing multiple clusters. None
Manticore distributed index prefix The prefix used when creating distributed index in Manticore. This needs to be the same for all sites participating in the federation. Tiki_
Option Description Default
Federated search Search through alternate site indices.
Elasticsearch is required
Disabled
Elasticsearch tribe node URL URL of the tribe client node accessing multiple clusters. None
Option Description Default
Federated search Search through alternate site indices.
Elasticsearch is required
Disabled
Elasticsearch tribe node URL URL of the tribe client node accessing multiple clusters. None



Introduced with Tiki14, the federated search allows integrating results from other sources into the main search results.

The feature uses Elasticsearch's ability to query across multiple indices, It can be used for these primary scenarios:

  1. Sister sites, hosted on the same cluster, such as the *.tiki.org sites
  2. ManifoldCF, to index external sources such as filesystems, CMIS or other applications
  3. Delegated responsibility environments, where a different group maintains and runs a search cluster

Sister sites, where other sites run Tiki

  1. Make sure all sites index using the Elasticsearch engine on the same cluster of servers
  2. Enable Federated Search from the Search administration panel
  3. Configure External Wikis on each of the sites to indicate which indices to include in the search results.


Permissions will be filtered. By default, Tiki will use the current user's groups, which match by name. The external wiki can also be configured to search using a fixed set of groups, such as only "Anonymous", making sure only public content is accessible.

ManifoldCF

  1. Bind the index through the dependency injection container (UI may be added once the required configurations stabilize)
  2. Clear caches
  3. Access the checker from Admin > Search > Federated Search
    • Your index will be listed
    • Create it from the UI if it does not exist, as ManifoldCF will not create it properly by default
  4. Configure ManifoldCF's output to ElasticSearch, using the same index and type configured in Tiki.
    • Use separate indices for each repository.
  5. Configure ManifoldCF's repository to your data source
  6. Configure a job to bind both together and set the update frequency
  7. Run the job manually to index the content
  8. Search for content across your custom data source and Tiki simultaneously.

Sample configuration: db/config/custom.xml
Copy to clipboard
<!-- within a services block --> <service class="Search\Federated\ManifoldCfIndex"> <tag name="tiki.federatedsearch.index" index="manifold"/> <argument type="string">generic</argument> <argument type="string">http://example.com/</argument> </service>

  • manifold is the index name
  • generic is the type
  • http://example.com/ is the prefix to apply to the file path in link (note that this is subject to changes in the future)


Delegated responsibility

In many organizations, content is spread across multiple locations. Legacy systems are in place. For all those situations, tools will be required to load the content into Elasticsearch. From there, Federated Search will allow to include those indices into the search results.

For cases where the index resides in a different Elasticsearch cluster, tribe nodes can be used to join them together. Tiki allows configuring a tribe node client in addition to a primary server. The tribe node will allow searching in indices located in separate clusters without them sharing resources.

Where to use

This has been usable in tiki-searchindex.php since the beginning, and from Tiki 21 can be used in PluginList and PluginCustomSearch which is based on PluginList.