StatsConnector(
searcher: HitsSearcher,
responseSearch: ResponseSearch
)
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
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.
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.
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
The Searcher
that handles your searches.
The initial search response to render.
View
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
.val view = StatsTextViewSpanned(statsB)
val presenter: StatsPresenter<String> = StatsPresenterImpl() // or your own `StatsPresenter` implementation
statsConnector.connectView(view, presenter)