Query processing optimization
When a query is issued to Funnelback the Funnelback query processor takes the query and applies the query processor options to run the query against the index. This results in an XML packet being generated which is returned to the UI which transforms this into the data model that underpins the modern UI.
The following techniques can be used to optimize the query processing within Funnelback. Optimizing the query will save on processing time and memory usage and is encouraged for every implementation.
| the options to optimize on will vary depending on what features are required by the search. | 
Techniques
Reduce the size of the XML returned by the query processor
This is controlled by the query processor options that are applied to the query. Query processor options are sourced from the following:
- 
Results page options: query_processor_optionsconfiguration value
- 
Search packagee options: query_processor_optionsconfiguration value
- 
faceted_navigation.cfg:qpoptsvalue
- 
CGI parameters passed in with the query 
Try to address the following:
- 
Reduce ranking complexity by setting -vsimple=onWhile not disabling ranking, it does cause a simplified ranking to be applied to the results. This should be set before other options for maximum effect as it changes a number of defaults.
- 
If results ranking is not required at all then use -sco=1[UnusedMetaClass]
- 
Minimize the value of num_ranks. Most of the time this is just limited to 10 results. However if you’re just interested in result counts (e.g. for faceted nav extra searches) then set num_ranks=1
- 
Always use document at a time (DAAT) mode where possible, and set DAAT to the lowest appropriate value (but don’t set -daat=0as this switched Funnelback to term at a time mode)
- 
Set the daat timeout to 0 ( -daat_timeout=0)
- 
If system generated summaries are not required then disable them. This done by setting the SM value to either -SM=meta(use metadata summaries only) or-SM=off(turns off summaries altogether)
- 
If using -SM=metaensure that the returned summary fields (-SFoption) list only those metadata classes that are being used in the templates.
- 
Minimize the size of the metadata and summary buffers ( -MBL,-SBLvalues respectively). If not required set these to a small value (-SBL=1 -MBL=1)
- 
Turn off curator ( curator=off). Note this is only set via a CGI parameter - there is nocurator=offquery processor option)
- 
Limit faceted navigation to count only the required metadata fields. In Funnelback v15.6 and earlier this may involve switching to profile-based facets. If faceted navigation is not required disable the counts in a hook script (e.g. remove countgbits,rmcf,count_urls,count_dates)
- 
Limit gscope counts to just those scopes required (e.g. -countgbits=0,1,2vs-countgbits=all). After v15.8 gscope counting can be disabled with-countgbits=
- 
Limit the depth of -count_urls(used by URL facets)
- 
Turn off spelling suggestions ( -spelling=off)
- 
If contextual navigation is unused ensure it is disabled ( contextual_navigation.cfg)
- 
Set a low value for the contextual navigation timeout ( -cnto=0.001)
- 
If quicklinks are unused ensure it is disabled ( quicklinks.cfg)
- 
Disable query blending if unusued ( -qsup=off)
- 
If result collapsing is unused ensure it is disabled. If used ensure collapsing is only run on the required collapsing signature, minimize the collapsing_num_ranksand only applycollapsing_SFvalues to those metadata values that are being used in the template.
- 
Consider scoping the result set where appropriate 
- 
If using geospatial search limit the result set using the maxdist parameter. 
- 
Disable geospatial range calculations if the distance from origin is not used ( -geospatial_ranges=false)
- 
Turn off the query syntax tree ( -show_qsyntax_tree=off)
- 
For enterprise search ensure that user key caching is configured 
- 
Disable extra searches that are not required 
- 
Ensure hook scripts only run on the appropriate searches (e.g. disable them for extra searches if not required) 
- 
Disable range calculation ( -rmrf=[UnusedMetaClass])
- 
Disable explain mode ( -explain=false)
Optimize the modern UI
Consider doing the following:
- 
Minimize the number of extra searches that run as part of any query 
- 
If extra searches are required always use extra results (per query) in preference to extra search (per result) as the overheads are much smaller. 
- 
Always use extra results (per query) extra searches in preference to other methods of running extra searches (e.g. via AJAX) 
- 
If lookups are required as part of results formatting (e.g. postcode lookup) then consider loading this data into the custom data element of the data model instead of performing a query. 
- 
If integrating with search.jsonorsearch.xmlconsider removing data model elements that you are not using via hook scripts.
Use an XSL transform to display XML records to the end user instead of a custom Freemarker template
Using an XSL transform avoids the overheads from running a padre query as the XSL transform is accessed directly by the cache controller.
See: XSLT processing