Android поиск по всем предметам

Полнотекстовый поиск в Android

В мобильных приложениях очень востребована функция поиска. И если в небольших продуктах ею можно пренебречь, то в приложениях, которые предоставляют доступ к большому количеству информации, без поиска не обойтись. Сегодня я расскажу, как правильно реализовать эту функцию в программах под Android.

Подходы к реализации поиска в мобильном приложении

    Поиск как фильтр данных

Обычно это выглядит как строка поиска над каким-нибудь списком. То есть мы просто фильтруем уже готовые данные.
Серверный поиск

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

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

В последнем случае на помощь приходит встроенный в SQLite полнотекстовый поиск (Full-text search). С его помощью можно очень быстро находить совпадения в большом объёме информации, что позволяет нам делать несколько запросов в разные таблицы без снижения производительности.

Рассмотрим реализацию такого поиска на конкретном примере.

Подготовка данных

Допустим, нам необходимо реализовать приложение, которое показывает список фильмов с сайта themoviedb.org. Для упрощения (чтобы не ходить в сеть), возьмём список фильмов и сформируем из него JSON-файл, положим его в assets и локально будем наполнять нашу базу данных.

Пример структуры JSON-файла:

Наполнение базы данных

Для реализации полнотекстового поиска в SQLite используются виртуальные таблицы. Внешне они выглядят как обычные таблицы SQLite, но при любом обращении к ним выполняется некая закулисная работа.

Виртуальные таблицы позволяют нам ускорить поиск. Но, помимо преимуществ, у них есть и недостатки:

  • нельзя создать триггер на виртуальной таблице;
  • нельзя выполнять команды ALTER TABLE и ADD COLUMN для виртуальной таблицы;
  • каждый столбец в виртуальной таблице индексируется, а это значит, что могут впустую тратиться ресурсы на индексацию столбцов, которые не должны участвовать в поиске.
Читайте также:  Отключить рекламу для android

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

Создание таблицы немного отличается от стандартного, у нас появились ключевые слова VIRTUAL и fts4 :

Наполнение же ничем не отличается от обычного:

Базовый вариант

При выполнении запроса используется ключевое слово MATCH вместо LIKE :

Для реализация обработки ввода текста в интерфейсе будем использовать RxJava :

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

Добавляем акценты

Для улучшения очевидности поиска воспользуемся вспомогательной функцией SNIPPET . Она используется для отображения отформатированного фрагмента текста, в котором найдено совпадение.

  • movies — название таблицы;
  • Алгоритм Портера

После этого преобразования фраза «дворы и призраки» выглядит как «двор* OR призрак*».

Символ «*» означает, что поиск будет вестись по вхождению данного слова в другие слова. Оператор «OR» означает, что будут показаны результаты, которые содержат хотя бы одно слово из поисковой фразы. Смотрим:

Резюме

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

Источник

Android поиск по всем предметам

Бухгалтер известного магната Хэдли Стрэнджа пытается раскрыть тайну века.

Приквел классической головоломки ISOLAND.

v1.0.15 + Мод: много денег

Помогите потерявшейся девочке Норе найти путь обратно домой.

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

Приключенческая игра где вы будете расследовать исчезновение известного писателя.

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

Изучайте одинаковые картинки и находите различия.

Управляйте детективном и помогите ей найти серийного убийцу.

Фантастическое приключение с поиском предметов!

Сможешь ли ты отгадать все загадки и тайны в детективной игре?

Разгадайте тайну удивительной легенды о Кровавой луне.

Исследуйте запертый бункер и отыщите все ключи для того чтобы покинуть его.

Отличная головоломка где вы будете разгадывать тайны странного острова.

v1.0.35 + Мод: много денег

Квест где вы будете исследовать таинственный остров и огромный особняк.

Увлекательное путешествие в древний затерянный город который поведает вам много тайн.

Захватывающий квест где вы будете путешествовать по пяти королевствам.

Погрузитесь в мир сказок и раскройте все тайны и загадки этой игры.

Отличное приключение Петьки и ВИЧ в Америке.

Увлекательный квест где вы будете помогать главной героине выиграть супер приз.

Исследуйте студенческое общежитие и старайтесь как можно быстрее покинуть его.

Источник

Android поиск по всем предметам

Отправляйтесь в космос вместе с гномом, как в старые добрые времена.

Оригинальная игра головоломка с элементами квеста и побега из комнаты.

Отличная игра про талантливую художницу.

Бухгалтер известного магната Хэдли Стрэнджа пытается раскрыть тайну века.

Напрягите не мозг, а глаза!

Отправляйтесь с блогером Анжело в ад и соберите ценный репортаж.

Третья часть приключений Питера.

Прошлое всегда возвращается.

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

Продолжение одной из самых высоко оценённых хоррор игр.

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

Присоединись к продолжению амбициозной игры от Amanita Design.

Веселая игра где вы будете помогать забавному герою Чучело заполучить черешню.

Забавный поиск предметов.

Узнайте, с чего начиналась серия Samorost.

Толковый, нуарный детективчик.

Жуткая головоломка для двоих игроков.

Приключенческая игра с сотнями сюжетных линий и головоломок.

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

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

Источник

Android поиск по всем предметам

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

v1.3.121 + Мод: бесконечные ресурсы

Веселая игра где вы будете помогать забавному герою Чучело заполучить черешню.

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

Продолжение всеми известной головоломки The Room.

v1.06 Full + Мод: бесконечные пропуски

Присоединись к продолжению амбициозной игры от Amanita Design.

Столкнитесь со своими самыми глубокими страхами и разгадайте леденящую кровь тайну лечебницы.

Увлекательная игра где вы будете разгадывать тайну исчезновения семьи.

Приключения «чумного» доктора.

Управляйте демоном Сидом и помогите ему справится с наемными убийцами.

Ухаживайте за животными и примите участие в веселых играх.

Оригинальная игра головоломка с элементами квеста и побега из комнаты.

Приключенческая игра где вы будете помогать Люси путешествовать по фантастическому миру.

Разгадайте тайны научно-исследовательского здания и найдите все улики и спрятанные предметы.

Отличное приключение Петьки и ВИЧ в Америке.

Жуткая головоломка для двоих игроков.

Продолжение одной из самых высоко оценённых хоррор игр.

Откройте для себя удивительный трехмерный мир игры и раскрой все его тайны.

v1.054 + Мод: без рекламы

Приключенческий хоррор на андроид, со сложными головоломками.

Приключенческая игра где вы будете помогать главному герою ходить на свидания.

Выживайте в ужасном доме в компании монстров и постарайтесь покинуть его как можно быстрее.

Источник

Читайте также:  Обои иконки для андроид
Оцените статью