Я работаю над личным Android-приложением на Kotlin, и я хочу реализовать InstantSearch. У меня есть следующая конструкция записи в Algolia:
{
"creationTime": 1566396861797,
"description": "It's my second home now...",
"imagePath": "https://firebasestorage.googleapis.com/.......",
"memoryId": "-LmoWe8PEqCs0Szv9KKJ",
"memoryTitle": "Second visit",
"userId": "vIWJgFpnUSeZJw3wjrJeEAxbNoE2",
"imageLabels": [
"Property",
"Furniture",
"City",
"Human settlement",
"Real estate",
"Roof",
"Room",
"Skyline",
"Building",
"Metropolitan area",
"Sky",
"Balcony",
"Apartment"
],
"objectID": "-LmoWe8PEqCs0Szv9KKJ"
}
В моем InstantSearch я хочу обеспечить поиск, который представляет только записи со значением userId
, идентичным этому конкретному пользователю, отправившему запрос. Сначала я добавил userId к атрибутам для фасетирования на панели инструментов. Я точно не знаю, как продолжить с этого момента. Я не знаю, как фильтровать записи во время запроса.
Вот моя ViewModel:
class MyViewModel : ViewModel() {
val client = ClientSearch(ApplicationID("*****"), APIKey("*******"), LogLevel.ALL)
val index = client.initIndex(IndexName("memory_diary"))
val searcher = SearcherSingleIndex(index)
val adapterMemory = MemoryAdapter()
val dataSourceFactory = SearcherSingleIndexDataSource.Factory(searcher) { hit ->
Memory(
hit.json.getPrimitive("userId").content,
hit.json.getPrimitive("objectID").content,
hit.json.getPrimitive("memoryTitle").content,
hit.json.getPrimitive("description").content,
hit.json.getPrimitive("creationTime").content.toLong(),
hit.json.getPrimitive("imagePath").content,
hit.json.getArray("imageLabels").content.map { jsnelm -> jsnelm.content }
)
}
val pagedListConfig = PagedList.Config.Builder().setPageSize(50).build()
val memories: LiveData<PagedList<Memory>> = LivePagedListBuilder(dataSourceFactory, pagedListConfig).build()
val searchBox = SearchBoxConnectorPagedList(searcher, listOf(memories))
val stats = StatsConnector(searcher)
val filterState = FilterState()
val connection = ConnectionHandler()
init {
connection += searchBox
connection += stats
connection += filterState.connectPagedList(memories)
}
override fun onCleared() {
super.onCleared()
searcher.cancel()
connection.disconnect()
}
}
Я подумал, что, возможно, есть функция, которая фильтрует записи в SearcherSingleIndexDataSource.Factory
, но я не нашел ничего подобного.
Так как я могу это сделать?