Search Improvements

Search Improvements 2.19.1

No permission to download
Hello. I am having problems with the addon on xf v2.2.13

InvalidArgumentException: Unknown search handler type 'conversation' - src/XF/Search/Search.php:325
1768857910709.webp
 
I just downloaded the update you uploaded and this was from after that
Please post the actual stack trace and not a truncated screenshot of it, and when reporting please include what version of the add-on it is with.

Do you have Conversation Improvements installed? Or did you uninstall it at some point.

Can you run this SQL query? I need to see the search types list for your site.
SQL:
select content_type,field_value,addon_id
from xf_content_type_field
where field_name = 'search_handler_class' and content_type in ('conversation','conversation_message');
 
Please post the actual stack trace and not a truncated screenshot of it, and when reporting please include what version of the add-on it is with.

Do you have Conversation Improvements installed? Or did you uninstall it at some point.

Can you run this SQL query? I need to see the search types list for your site.
SQL:
select content_type,field_value,addon_id
from xf_content_type_field
where field_name = 'search_handler_class' and content_type in ('conversation','conversation_message');
  • Conversation Improvements 2.5.1
  • Search Improvements 2.17.5

That command returns No rows.
 
Does the data exist to increase the precision of the reported time averages in the admincp?

For example I always see 0 milliseconds...

1772150365604.webp

It would be nice to see one or two additional decimal places in these locations if possible. I know sub millisecond times aren't very useful but when I see zero all the time it just makes me think the data is missing or there is an issue with the calculation itself.

Thanks.
 
Under the hood elasticsearch is reporting indexing.index_time_in_millis and indexing.index_total the average is being computed very simply but it is using the XF number formatting which truncates the decimal places.

The average is being computed like this:
Code:
{{ parens(phrase('xfes_x_milliseconds_average', {'time': number($esStats.indexing.index_time_in_millis / $esStats.indexing.index_total)})) }}

Definitely could adjust that number() to include some decimal places.
 
There seem to be problems with OpenSearch version 3.7.0.

Code:
    ErrorException: {"sort":["_score",{"date":"desc"}],"docvalue_fields":[{"field":"discussion_id"},{"field":"user"},{"field":"date"}],"_source":false,"size":8,"query":{"bool":{"filter":[{"terms":{"type":["conversation","resource","thread","xfmg_album","xfmg_media"]}}],"must_not":[{"bool":{"filter":{"terms":{"type":["conversation","conversation_message"]}},"must_not":{"bool":{"filter":[{"term":{"active_recipients":1}}],"must_not":[]}}}}],"must":[{"function_score":{"query":{"multi_match":{"type":"bool_prefix","query":"ha","fields":["title_suggest","title_suggest._2gram","title_suggest._3gram"],"minimum_should_match":"2<80%","fuzziness":"AUTO","prefix_length":1}},"functions":[{"exp":{"date":{"origin":1781128526,"decay":0.5,"scale":31536000}}}]}}]}}} src/XF/Error.php:81

    Generiert von: Holger 10. Juni 2026 um 23:55

Stack-Trace

#0 src/XF.php(270): XF\Error->logError('{"sort":["_scor...', false)
#1 src/addons/SV/SearchImprovements/XFES/Elasticsearch/Api.php(49): XF::logError('{"sort":["_scor...')
#2 src/addons/XFES/Search/Source/Elasticsearch.php(885): SV\SearchImprovements\XFES\Elasticsearch\Api->search(Array)
#3 src/addons/SV/SearchImprovements/Search/ExecuteSearchWrapper.php(32): XFES\Search\Source\Elasticsearch->executeSearch(Object(SV\SearchImprovements\XF\Search\Query\KeywordQuery), Array, 8)
#4 src/addons/XFES/Search/Source/Elasticsearch.php(242): SV\SearchImprovements\XFES\Search\Source\Elasticsearch->executeSearch(Object(SV\SearchImprovements\XF\Search\Query\KeywordQuery), Array, 8)
#5 src/XF/Search/Search.php(260): XFES\Search\Source\Elasticsearch->autoComplete(Object(SV\SearchImprovements\XF\Search\Query\KeywordQuery), 8)
#6 src/XF/Search/Search.php(375): XF\Search\Search->{closure:XF\Search\Search::autoComplete():258}(Object(SV\SearchImprovements\XF\Search\Query\KeywordQuery), 8)
#7 src/XF/Search/Search.php(255): XF\Search\Search->executeSearch(Object(SV\SearchImprovements\XF\Search\Query\KeywordQuery), 8, Object(Closure), true)
#8 src/XF/Pub/Controller/SearchController.php(317): XF\Search\Search->autoComplete(Object(SV\SearchImprovements\XF\Search\Query\KeywordQuery), 8)
#9 src/XF/Mvc/Dispatcher.php(362): XF\Pub\Controller\SearchController->actionAutoComplete(Object(XF\Mvc\ParameterBag))
#10 src/XF/Mvc/Dispatcher.php(264): XF\Mvc\Dispatcher->dispatchClass('XF:Search', 'AutoComplete', Object(XF\Mvc\RouteMatch), Object(SV\SearchImprovements\XF\Pub\Controller\SearchPatchFirst), NULL)
#11 src/XF/Mvc/Dispatcher.php(121): XF\Mvc\Dispatcher->dispatchFromMatch(Object(XF\Mvc\RouteMatch), Object(SV\SearchImprovements\XF\Pub\Controller\SearchPatchFirst), NULL)
#12 src/XF/Mvc/Dispatcher.php(63): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#13 src/XF/App.php(2824): XF\Mvc\Dispatcher->run()
#14 src/XF.php(814): XF\App->run()
#15 index.php(23): XF::runApp('XF\\Pub\\App')
#16 {main}

Status der Anfrage

array(4) {
  ["url"] => string(21) "/search/auto-complete"
  ["referrer"] => string(34) "https://xxx/"
  ["_GET"] => array(0) {
  }
  ["_POST"] => array(6) {
    ["keywords"] => string(2) "ha"
    ["c"] => array(1) {
      ["users"] => string(0) ""
    }
    ["_xfToken"] => string(8) "********"
    ["_xfResponseType"] => string(4) "json"
    ["_xfWithData"] => string(1) "1"
    ["_xfRequestUri"] => string(1) "/"
  }
}

Löschen
 
Hi,

I have both the 'Ignore Content' and 'Search Improvements' add-on and since the last update to Search Improvements I am getting this error:


Code:


Server error log

TypeError: Truonglv\IgnoreContent\App::isIgnored(): Argument #2 ($contentId) must be of type int, null given, called in //public_html/forums/src/addons/Truonglv/IgnoreContent/Ignore/Thread.php on line 195 src/addons/Truonglv/IgnoreContent/App.php:36

Generated by: Dave Aug 4, 2026 at 6:42 AM

Stack trace

#0 src/addons/Truonglv/IgnoreContent/Ignore/Thread.php(195): Truonglv\IgnoreContent\App::isIgnored('thread', NULL)
#1 src/addons/Truonglv/IgnoreContent/Ignore/AbstractHandler.php(178): Truonglv\IgnoreContent\Ignore\Thread->isIgnoredContent(Object(SV\SearchImprovements\XF\Entity\ThreadCollab))
#2 src/addons/Truonglv/IgnoreContent/Entity/IgnoreTrait.php(33): Truonglv\IgnoreContent\Ignore\AbstractHandler->isIgnored(Object(SV\SearchImprovements\XF\Entity\ThreadCollab))
#3 src/addons/Truonglv/IgnoreContent/XF/Entity/Thread.php(49): Truonglv\IgnoreContent\XF\Entity\Thread->ticIsIgnored()
#4 src/XF/Service/ModerationAlertSendableTrait.php(86): Truonglv\IgnoreContent\XF\Entity\Thread->canView()
#5 src/XF.php(950): XF\Service\Post\MoverService->{closure:XF\Service\ModerationAlertSendableTrait::isContentVisibleToContentAuthor():84}()
#6 src/XF/Service/ModerationAlertSendableTrait.php(84): XF::asVisitor(Object(Andrew\ModeratorPanel\XF\Entity\User), Object(Closure))
#7 src/XF/Service/Post/MoverService.php(133): XF\Service\Post\MoverService->isContentVisibleToContentAuthor(Object(SV\SearchImprovements\XF\Entity\ThreadCollab), Object(SV\WarningImprovements\XF\Entity\Post))
#8 src/XF/InlineMod/Post/Move.php(43): XF\Service\Post\MoverService->move(Array)
#9 src/XF/InlineMod/AbstractAction.php(161): XF\InlineMod\Post\Move->applyInternal(Object(XF\Mvc\Entity\ArrayCollection), Array)
#10 src/XF/Pub/Controller/InlineModController.php(133): XF\InlineMod\AbstractAction->apply(Object(XF\Mvc\Entity\ArrayCollection), Array)
#11 src/addons/Siropu/AdsManager/XF/Pub/Controller/InlineMod.php(54): XF\Pub\Controller\InlineModController->actionPerform()
#12 src/XF/Mvc/Dispatcher.php(364): Siropu\AdsManager\XF\Pub\Controller\InlineMod->actionPerform(Object(XF\Mvc\ParameterBag))
#13 src/XF/Mvc/Dispatcher.php(266): XF\Mvc\Dispatcher->dispatchClass('XF\\Pub\\Controll...', 'Perform', Object(XF\Mvc\RouteMatch), Object(Siropu\AdsManager\XF\Pub\Controller\InlineMod), Object(XF\Mvc\Reply\Reroute))
#14 src/XF/Mvc/Dispatcher.php(121): XF\Mvc\Dispatcher->dispatchFromMatch(Object(XF\Mvc\RouteMatch), Object(Siropu\AdsManager\XF\Pub\Controller\InlineMod), Object(XF\Mvc\Reply\Reroute))
#15 src/XF/Mvc/Dispatcher.php(63): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#16 src/XF/App.php(2830): XF\Mvc\Dispatcher->run()
#17 src/XF.php(850): XF\App->run()
#18 index.php(23): XF::runApp('XF\\Pub\\App')
#19 {main}


A quick run through Claude and it suggests that it is a PHP TypeError involving the two add-ons, so thought I'd bring it to your attention:

Diagnosed addon incompatibility causing null thread ID error
This is a XenForo forum error — specifically a PHP TypeError caused by an incompatibility between several third-party addons. Here's what happened, reading the stack trace from the bottom (where the action started) to the top (where it crashed):

The sequence of events

A moderator named Dave used the "Move posts" inline moderation tool (XF\InlineMod\Post\Move) — likely moving one or more posts out of a thread.
Moving posts triggers a check to see if the destination content would still be visible to the original poster (ModerationAlertSendableTrait::isContentVisibleToContentAuthor). To do this safely, XenForo temporarily "becomes" that user (XF::asVisitor) and calls canView() on the thread.
The thread involved isn't a normal thread — it's a SV\SearchImprovements\XF\Entity\ThreadCollab object. This is a special "collaborative thread" entity type introduced by the Search Improvements addon (by Xon/SV).
The Ignore Content addon (by Truonglv) hooks into Thread::canView() to check whether the thread is on the user's ignore list. To do that, it tries to pull a content ID (the thread ID) from the entity.
Because the entity is this special ThreadCollab type rather than a normal Thread, its ID comes back as null instead of an integer.
App::isIgnored() has a strict type hint requiring an int for $contentId, so passing null throws the fatal TypeError, and the whole "move posts" action fails.
Root cause in plain terms

The Ignore Content addon isn't equipped to handle the special ThreadCollab entity that the Search Improvements addon creates — it assumes every thread-like object has a normal integer ID, but this one doesn't in the given context. It's an addon compatibility bug, not something your admin/moderator did wrong.

What you can do about it

This will likely keep happening whenever a moderator tries to move posts involving one of these "collab" threads.
Best path: report it to the Truonglv Ignore Content addon developer (and/or the SV Search Improvements developer), since it's a cross-addon compatibility issue — include this exact stack trace, they'll likely need to add a null-check or type guard before calling isIgnored().
Check if either addon has a newer version — this kind of thing sometimes gets patched once reported.
As a workaround, you could ask Dave (or moderators generally) to avoid using "move posts" on collaborative/search-improvement-related threads until it's fixed.



Regards,

Dave

@truonglv
@Xon
 
I somewhat expect Claude is hallucinating, and it is a post without a thread (or maybe a thread without a first/last post).

The ThreadCollab type is simply the top most extended class for \XF\Entity\Thread, and it's reasoning about it is just wrong.
 
Back
Top Bottom