Как реализовать текстовый поиск в приложении с помощью данных из магазина? - PullRequest
1 голос
/ 06 марта 2019

Привет друзья еще раз!

Мне нужно реализовать полнотекстовый поиск в моем приложении для Android, и я ищу лучший способ.

Я нашел несколько способов сделать это, но я прошу совета, какой из них будет лучшим и вызовет меньше проблем. У меня есть одна коллекция полных данных, в которой есть HTML-текст, который я анализирую после запроса и затем отображаю. Мне нужно реализовать полнотекстовый поиск в этой коллекции. Я нашел рекомендуемый текстовый поиск по Алголии , но это не совсем то, что мне действительно нужно. Или, может быть, я мог бы искать текст из кэша, который кэширует данные, когда соединение находится в автономном режиме, по документам Firestore?

Можно ли запросить все данные и затем сохранить их в ArrayList или, возможно, в Array, или какой вариант будет наилучшим?

Вот мой viewModel, который запрашивает всю коллекцию.

public class DetailActivityViewModel extends ViewModel {

private final FirebaseListLiveData<Data> liveDataQuery;

public DetailActivityViewModel(String id) {
    liveDataQuery = new FirebaseListLiveData<>(Data.class, FirebaseFirestore.getInstance()
            .collection("fullData").whereEqualTo("mainId", id)
            .orderBy("order", Query.Direction.ASCENDING));
}
public FirebaseListLiveData<Data> getLiveDataQuery() {
    return liveDataQuery;
}
}

И, наконец, мои пользовательские LiveData.

public class FirebaseListLiveData<T> extends LiveData<List<T>> implements EventListener<QuerySnapshot> {

private Class<T> typeParameter;
private Query query;
private ListenerRegistration listenerRegistration;

public FirebaseListLiveData(Class<T> typeParameter, Query query) {
    this.typeParameter = typeParameter;
    this.query = query;
}
@Override
protected void onActive() {
    if (listenerRegistration == null) {
        listenerRegistration = query.addSnapshotListener(this);
    }
}
@Override
protected void onInactive() {
    if (listenerRegistration != null) {
        listenerRegistration.remove();
        listenerRegistration = null;
    }
}

@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
    if (e == null) {
        if (queryDocumentSnapshots != null && !queryDocumentSnapshots.isEmpty()) {
            postValue(queryDocumentSnapshots.toObjects(typeParameter));
        } else {
            postValue(null);
        }
    } else {
        postValue(null);
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...