Quick Search
The quick search button on the top right button of ERP5 is intended to provide some clever results with as little information as possible. It is used to initiate a query.
Examples
User input: P-ERP5 Result: the ERP5 project, followed by documents followed which contain the P-ERP5 ngram User input: 34834 Result: the invoice No 34834, followed by documents which contain the 34834 ngram
Implementation
The top right search field (both in KM and ERP5) is called something like new_quick_search_text to notify the fact that the information which is entered is only supposed to be used to initiate a new query.
The query value (ex. P-ERP5) is passed to the catalog under the keywokd quick_search_text, which is a scriptable key. A script is then invoked to process the value:
# pseudo-code
if isAdvanced(value):
# the text which was provided contains
# is not a simple valye
return Query(SearchableText=value)
return ComplexQuery(Query(title=value),
Query(reference=value),
Query(source_reference=value),
Query(destination_reference=value),
Query(SearchableText=value),
operator="OR")Task: review naming and implementation
Implementation Future
Hopefully, we will be able to create a kind of order based on weights in catalog which can be used to sort results based on their rank.
# pseudo-code
if isAdvanced(value):
# the text which was provided is not a simple value
# and contains predicats such as portal_type:
return Query(SearchableText=value)
return ComplexQuery(Query(title=value, key='RawKey', weight=1),
Query(reference=value, key='RawKey', weight=1),
Query(source_reference=value, key='RawKey', weight=1),
Query(destination_reference=value, key='RawKey', weight=1),
Query(advanced_search_text=value, key='RawKey', weight=1),
Query(title=value, key='KeywordKey', weight=0.5),
Query(SearchableText=value),
operator="OR")Task: make sure unions are possible and that they can take into account the full text search ranking (MATCH) in combination with other values
Customisation
Scriptable keys are very useful for site customisation of the top right search box. Some sites which are always searching for invoices based their reference.
They may prefer the following:
# pseudo-code
if isAdvanced(value):
# the text which was provided is not a simple value
# and contains predicats such as portal_type:
return Query(SearchableText=value)
return ComplexQuery(ComplexQuery(
Query(portal_type='Invoice'),
Query(reference=value),
operator="AND")
)
Query(SearchableText=value),
operator="OR")
Advanced Search Key
The advanced search key is probably no longer useful since the catalog itself implements a search grammar. A careful review of SQLCatalog_makeAdvancedSearchQuery is required though to make sure that no feature is lost.
Listbox SearchableText
Each listbox has an optional SearchableText on top and bottom. This SearchableText field is not related to scriptable keys.
Search Area
Default Search Domains
The default search domains for quick search (in the access tabs of ERP5, in KM) should be configured using portal_domains and a combination of static and dynamic domains. The choice of domains (or or many) is a user preference.
Task: remove hardcoding of search domains
Additional Search Domains
In ERP5 KM sites, the search_area Web Section is configurable and can be used to extend the default search predicates on a site per site level (ex. Staff News, Product News, etc.) by combining selected portal types and categories.
Task: extend domain lookup