Рекомендации по обращению с поиском

У меня есть настройка SearchView , и у меня есть свободно развязанная архитектура с использованием Retrofit и Otto .

Мне интересно, что такое Best Practices для поиска в Android или любое мобильное приложение в целом (что-то вроде этого может быть применено и к iOS).

В частности, я использую AutoCompleteTextView для обработки предложений в моем SearchView и данные поступают прямо из API . Я не считаю, что это лучшая практика, поскольку каждый раз, когда пользователь меняет текст в SearchView инициируется вызов API.

Я думаю о хранении кеша в SQLite, а затем отсканировании результатов оттуда, но что, если пользователь хочет получить самые непосредственные данные? Как бы вы справились с этим? Какой шаблон будет использовать?

По достоинству оценят любые мысли о лучшей архитектуре или подход к поиску в Android.

Я думаю, что нет смысла делать вызов API до того, как пользователь перестанет печатать. Итак, вы можете положить задержку, скажем, 500 мс. Когда пользователь перестает печатать, после 500 мс вы вызываете вызов API и показываете результаты.

Вы можете использовать метод postDelayed Handler для планирования запросов API поиска. Вы можете использовать Handler для управления очередью сообщений. Вы отправляете задержанный Runnable каждый раз, когда пользователь вводит символ и отменяет предыдущие сообщения. Это будет выглядеть так:

 public void onTextChanged(CharSequence s, int start, int before, int count) { handler.removeCallbacks(searchRunnable); handler.postDelayed(searchRunnable, 500); } 
  • Сначала вам нужно сделать столбец индексом, который является атрибутом поиска.
  • Вам нужно сохранить только этот столбец в базе данных sqlite. Он используется для выбора параметров из вашей таблицы, когда поиск выполняется пользователями.
  • То вы вызываете api для результата поиска, после слова, выбранного в строке поиска.

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

Сначала нам нужно задать несколько вопросов относительно того, как мы будем решать этот вопрос:

  • Есть автозаполнение?
  • Какова область поиска?
  • Будет ли кеширование?

И еще много вопросов.

Я бы, вероятно, сначала создал пользовательский адаптер для обработки запросов в поиске, а затем реализовал агрессивное кэширование по запросам пользователя. Это важно в том смысле, что запросы пользователя очень важны. Вероятно, было бы целесообразно использовать только кешированные результаты для Autocomplete для реализации автозаполнения очень дорого, и при каждом изменении текста он будет пинговать сервер.

Кэширование может быть выполнено с помощью помощников SQLite в Android. Это может быть дорого, но мы имеем дело с простыми объектами запроса (как это должно быть в случае с API, объекты должны быть размером памяти или байта).