To allow my user performing more complex search, I'm working with Algolia.
com.algolia.search.saas.Query algolia_query =
new com.algolia.search.saas.Query(mLastQuery)
.setAttributesToRetrieve("content")
.setAttributesToRetrieve("category")
.setHitsPerPage(10);
index.searchAsync(algolia_query, new CompletionHandler() {
@Override
public void requestCompleted(JSONObject jsonObject, AlgoliaException e) {
Log.d("algolia", jsonObject.toString());
}
});
I would like to convert this jsonObject into something compatible with FirestoreRecyclerOptions
to be able to use FirestoreRecyclerAdapter
Thank you !
There is no connection between FirebaseUI and Algolia. If you want to show search results from Algolia, you'll have to build an adapter yourself.
You could consider using FirebaseUI's
FirebaseIndexedArray
for inspiration. But fair warning: both its internals, and the modifications needed, are quite involved.For a better understanding, I'll try to explain this with an example. Let's assume we have a
FirebaseFirestore
object that points to the root reference of the database and aCollectionReference
object that points to a collection namedproducts
. And for that we can use the following two lines of code:Let's aslo assume we have a Cloud Firestore database that looks like this:
To achieve this structure, let's add these products to the database and also the corresponding indexes, using the code below:
Let's also assume we have 2 views in out layout file, an
EditText
and aListView
.To actually display those products in our
ListView
, let's use the following code:In order to filter the products according to the text that we type in our
EditText
, we need to add aTextChangedListener
like this:So in order to make it work, we have created a new adapter object. This means that for every character that we type in the
EditText
, we create a new adapter and we populate this adapter with the results that are coming from the database. And to answer your question, in order to achieve what you want, you don't have to change theJSONObject
, you have create a new query object that should be passed to thesetQuery()
method that is called on theFirestoreRecyclerOptions
object. I just gave you a simpler example to understand the flow. For more information, I also recommend you see this video.