Android - создание полного google-подобного текстового поиска из пользовательского представления списка с фильтрацией в реальном времени - PullRequest
0 голосов
/ 23 октября 2019

У меня есть пользовательский listView (который я буду заполнять из firebase), по которому я хочу реализовать поиск. Моя реализация с классом Filter уже работает ... вроде. Но не очень крепкий. Пример: он не обрабатывает орфографическую ошибку (нет нечеткости), и важен порядок слова.

Пример: в просмотре списка у меня есть: hello world

Если я ищу world, hello world отображается правильно. Тем не менее, world hello не соответствует элементу listview.

Так что мне нужна моя фильтрация для обработки орфографических ошибок и для того, чтобы порядок слов не имел значения. Это мой текущий код фильтрации:

class SearchFiltering extends Filter {


        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
            FilterResults results = new FilterResults();

            if (charSequence != null && charSequence.length() > 0) {
                charSequence = charSequence.toString().toUpperCase().trim();

                ArrayList<SearchItems> filtered = new ArrayList<>();

                for (int i = 0; i < filteredItems.size(); i++) {
                    String cleanedItem = filteredItems.get(i).getName().toUpperCase();

                    if (cleanedItem.contains(charSequence)){
                        filtered.add(filteredItem.get(i));

                    }
                }

                results.count = filtered.size();
                results.values = filtered;
            } else {
                results.count = filteredItem.size();
                results.values = filteredItem;
            }
            return results;
        }

Я знаю, что проблема здесь в .contains(), что недостаточно для моих намерений. Поскольку я новичок в этом, я не знаю каких-либо функций / библиотек, которые могут обрабатывать нечеткость. Я также хотел бы знать о хорошем подходе сделать последовательности слов не относящимися к фильтру.

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

некоторые другие предложения включают использование Apache Lucene или MySQLlite, которые, я думаю, не нужны для этой области.

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

Лучше ли запрашиватьбазы данных в Firebase напрямую (в режиме реального времени) и фильтровать результаты таким образом, прежде чем заполнить listView? Я думаю, что этот подход будет довольно медленным.

...