Skip to main content
Signature
StatsConnector(
    searcher: HitsSearcher,
    responseSearch: ResponseSearch
)

About this widget

Each search Response contains various metadata that you might display in your search experience. The following information is available as a part of the Response:
  • hitsPerPage. Number of hits per page.
  • totalHitsCount. Total number of hits.
  • pagesCount. Total number of pages.
  • page. Current page.
  • processingTimeMS. Processing time of the search request (in ms).
  • serverTimeMS. Processing time of the complete request (in ms).
  • query. Query text that produced these results.
See also: Get started with imperative UI

Examples

Kotlin
class MyActivity : AppCompatActivity() {
    val searcher = HitsSearcher(
        applicationID = ApplicationID("YourApplicationID"),
        apiKey = APIKey("YourSearchOnlyAPIKey"),
        indexName = IndexName("YourIndexName")
    )
    val stats = StatsConnector(searcher)
    val connection = ConnectionHandler(stats)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val statsView = StatsTextView(statsA)
        connection += stats.connectView(statsView, StatsPresenterImpl())
        searcher.searchAsync()
    }

    override fun onDestroy() {
        super.onDestroy()
        searcher.cancel()
        connection.disconnect()
    }
}

Low-level API

If you want to fully control the Stats components and connect them manually, use the following components:
  • Searcher. The Searcher that handles your searches.
  • StatsViewModel. The logic applied to the stats.
  • StatsView. The view that renders the stats.
Kotlin
class MyActivity : AppCompatActivity() {
    val searcher = HitsSearcher(
        applicationID = ApplicationID("YourApplicationID"),
        apiKey = APIKey("YourSearchOnlyAPIKey"),
        indexName = IndexName("YourIndexName")
    )
    val statsViewModel = StatsViewModel()
    val connection = ConnectionHandler()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val statsView = StatsTextView(statsA)
        connection += statsViewModel.connectSearcher(searcher)
        connection += statsViewModel.connectView(statsView)
        searcher.searchAsync()
    }

    override fun onDestroy() {
        super.onDestroy()
        searcher.cancel()
        connection.disconnect()
    }
}

Compose UI

InstantSearch provides the StatsState as a state model, which is an implementation of the StatsView interface. You need to connect StatsState to the StatsConnector or StatsViewModel like any other StatsView implementation.
Kotlin
class MyActivity : AppCompatActivity() {
    val searcher = HitsSearcher(
        applicationID = ApplicationID("YourApplicationID"),
        apiKey = APIKey("YourSearchOnlyAPIKey"),
        indexName = IndexName("YourIndexName")
    )
    val statsState = StatsTextState()
    val stats = StatsConnector(searcher)
    val connections = ConnectionHandler(stats)

    init {
        connections += stats.connectView(statsState, StatsPresenterImpl())
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyStats(statsState) // your own UI composable to display stats
        }
        searcher.searchAsync()
    }

    override fun onDestroy() {
        super.onDestroy()
        searcher.cancel()
        connections.disconnect()
    }
}

Parameters

searcher
HitsSearcher
required
The Searcher that handles your searches.
The initial search response to render.

View

view
required
The view that renders the stats.
presenter
StatsPresenter<T>
required
The presenter that defines the way we want to display stats, taking as input a Response and returning a T.
Kotlin
val view = StatsTextViewSpanned(statsB)
val presenter: StatsPresenter<String> = StatsPresenterImpl() // or your own `StatsPresenter` implementation
statsConnector.connectView(view, presenter)
I