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)