Search Improvements

Search Improvements 2.5.5

No permission to download
  • Fix "array_fill_keys() expects parameter 1 to be array, null given" error when content weighting has not been configured
  • Like
Reactions: ivp and lazy llama
  • When using the 'content weighting' feature, reduce the ElasticSearch query complexity by not applying redundant content weighting terms
This feature is powering tag autocomplete and username autocomplete which supports partial matches, and non-prefix lookups on SpaceBattles.

These are examples of a "specialized index".

The username autocomplete it creates an index with just the user/email and replaces the admin quick search and front-end username autocomplete with an elasticsearch powered version.

The tag autocomplete replaces the front-end tag autocomplete with an elasticsearch powered version.

In both cases this allows non-start-of-string matching, with typo tolerance.

  • Require XenForo 2.2+, removes xf2.0/xf2.1 support
  • Add "Specialized index" support
    • Specialized search index allows generating single-purpose elastic search indexes while re-using as much XF search infrastructure as possible.
      • Elasticsearch index is more akin to an SQL table than an entire database, so for very specific tasks a single purpose search index works better.
      • A separate index also allows changing indexing properties and re-indexing just that one index without impacting the main search index
    • Implementation of a specialized index notes;
      At the core, a XenForo search handler is used to drive the functionality.
      • The search handler should implement the interface \SV\SearchImprovements\Search\Specialized\SpecializedData
      • Use the types MetadataStructure::KEYWORD or MetadataStructure::STR fields in setupMetadataStructure.
        These types will be rewritten to add .exact & [/icode].ngram[/icode] subfields. To skip this pass ['skip-rewrite' => true] to the MetadataStructure::addField's 3rd argument.
        • MetadataStructure::KEYWORD - shortish text which is semi-structured such as tags or usernames
        • MetadataStructure::STR - Arbitrary text which uses phrases of text
      • Register the search handler with the following content type fields
        • specialized_search_handler_class
        • entity
      • This handler really shouldn't be registered with search_handler_class content type field.
      • Add the behavior SV\SearchImprovements:SpecializedIndexable to the entity.


Example of the 'indexes page'

  • Fix the "Default search order" option would get reset when changing "Search options" under Enhanced Search Setup page
  • Fix weight by content type for XF2.2
  • Re-add "On error, log search DSL" option, default on.
  • Improve extendibility of weight-by-content-type feature (Allow custom searches to opt-in to content weighting for single type searches)
  • Improve compatibility with ElasticSearch v7+
  • Support float-point weight values in weight by content-type
  • Ensure XFES doesn't swallow the actual error message for a query failing instead of "all shards failed" message (backport for older versions of XFES)
  • Improve extendibility of weight-by-content feature
  • Allow weight-by-content to be extended.
  • Compatibility update when resolving an extended class to the root class
  • Require Standard Library by Xon v1.2.0+
  • Compatibility fix for Threadmarks v2.8.0+ and possibly other add-ons which may extend search page defaults
  • Requires php 7.0+
  • Now depends on Standard Library by Xon
  • Support XF2.2+