Plugin: BX Service Omnisearch
- Maintainer: Diego Ruiz - Thomas Bayen - Carlos Ruiz - BX Service GmbH
- Sponsor: BX Service GmbH - Trek Global
- Status: Beta, tested with release 6.2
- License: GPLv2
- Sources: GitHub
- JAR files: Download
- Video tutorial: Omnisearch in iDempiere
Description
- This plugin extends iDempiere with a new way to search in every table from a single place.
- The omnisearch plug-in allows you to index tables and do an advanced search from the home dashboard.
- You can navigate easily to the results.
- This plugin works only for implementations using PostgreSQL 9.3+
The plugin adds a new field, a Process, and a dashboard.
Configuration
Log in to iDempiere as System and navigate to Table and Column Window -> Column tab, and check the 'Text search index' flag in the columns that want to be indexed for future searches.
F.e: if you check this flag in C_Invoice/C_Order -> DocumentNo, Description, you will be able to search for a specific text and the dashboard panel will return all the records from invoices and orders that match the given text in the description or document number field.
Once you've done this, log in to the client from which you want to use the plugin and run the 'Create/Recreate Omnisearch Index' process. Select the index type (in version 1 only Text Search is available but we invite other developers to contribute other index mechanisms).
If you run the process logged as System, the index will be created for all the clients
Once the process finishes, look for any string in the dashboard panel.
Usage
On the omnisearch dashboard panel, type any string that you want to search within the configured tables and press enter.
For this example, I've configured the tables for orders and invoices to search by document No. and description and the Kanban board by name. So when I look for the String 'L33211' the result panel shows me every record that has L33211 as the Document No or Description.
The results are shown with a header containing the name of the window, followed by the table identifiers.
You can double-click on the blue text to zoom to the corresponding window.
Advanced Search
If you check the 'Advanced search' flag, you can perform more complex searches, as using prefixes and operators.
For example, to find everything that starts with a given String you can write 'searchString':*, as shown in the image below.
Image showing the results from Invoices, Orders and Kanban configurations where the indexed field starts with Tour
As can be seen in the image, when the results are greater than 10 it is divided into pages.
Another example of advanced search is to look for a combination of strings, separate the words you want to look for with a single space or optionally using the special character & as shown in the image below.
Image showing the results from Invoices, Orders and Kanban configurations where the indexed field starts with Tour and contains the string R60307
To read more about Postgres full-text search you can check these two tutorials:
Technical Aspects
The repository is split into three plugins.
The de.bxservice.omnisearch one is created as a general plugin, defining everything needed to create and work with most kind of indexes. The create index process and the document and index factories which are all there to be reused.
de.bxservice.omnisearch_tsearch_pg is created as a service that uses the above-mentioned plug-in. It is the concrete implementation of the interfaces and abstract classes. This plug-in can be exchanged by other plugins using different index tools: Lucene, NoSQL databases, amazon cloud search, etc...
de.bxservice.omnisearchdp is the UI plugin, is the one that creates the dashboard panel and interacts with the user.
If you want to change the provider plug-in. Change the OMNISEARCH_INDEX System configurator to set your customize index tool.
Install
- Compile on your own eclipse, or download the latest jar files published at GitHub
- Install the three plugins using the Felix console or using the OSGi console
- Start the plugin de.bxservice.omnisearch
- Start the plugin de.bxservice.omnisearch_tsearch_pg (this executes the 2Pack that creates the dictionary entries)
- Refresh the plugin org.adempiere.ui.zk (to integrate the fragment from plugin de.bxservice.omnisearchdp)
- Run Cache Reset
- Configure the columns to be indexed and go to a tenant and run "Omnisearch > Create index"