Я реализую поисковый фильтр через instantsearch.js с ползунком диапазона.
Слайдер фильтрует диапазон лет на основе year
столбец данных каждого элемента. В этой базе данных есть некоторые элементы без точного года, но с «предполагаемым» периодом, например «около XVIII секунды» или «Конец 1910-х годов». Это означает, что для этих элементов существует не один год для фильтрации, а несколько лет.
Скажем, для бывших. что я хочу отфильтровать результаты в диапазоне лет с 1874 по 1930 год, и у меня есть пункт «Вторая половина 19-го века» в year
поле. Как вы можете сказать, это должно привести к матчу, так как любой год с 1851 по 1900 год подходит для этого пункта.
Как я должен относиться к этому типу данных, чтобы быть частью этого диапазона фильтра?
Как мне структурировать данные в year
колонка этой БД?
Должен ли я использовать некоторую логику сценария в поиске JavaScript по алгоритму, а не использовать специальный способ структурирования данных или индексации?
Я думал о такой логике, как:
«Если значение элемента не просто цифры, конвертируйте его в диапазон лет.
Затем проверьте, может ли диапазон этих лет соответствовать фильтру, требуемому в
слайдер
Я не могу сказать, как это сделать, и это выглядит немного громоздко и глупо для меня. Я почти уверен, что это не новая проблема, с которой приходится сталкиваться при проектировании данных БД, поэтому должен быть правильный способ ее решения.
Я попытался поискать, но я даже не знаю, как правильно сформулировать эту вещь, которую я спрашиваю … если у вас есть предложения по редактированию заголовка, пожалуйста, скажите мне!
Я использую базу данных MySQL вместе с PHP.
В Algolia вам нужно будет преобразовать эти значения в метку времени, после чего вы сможете использовать numericFilter и добавить ползунок диапазона или числовой список уточнения в свой пользовательский интерфейс.
Также атрибут должен быть определен как attributeForFaceting в вашей конфигурации индекса.
https://community.algolia.com/instantsearch.js/documentation/#rangeslider
https://community.algolia.com/instantsearch.js/documentation/#numericrefinementlist
Учитывая ваш year
в качестве диапазона, вы можете добавить beggining
и end
приписать эти поля. Пример:
EventTimes
id SMALLINT NOT NULL PRIMARY,
yearEnd DATETIME,
yearStart DATETIME
В этом случае конец и начало будут равны (я использую нулевые концы), когда событие определенное время, и становится диапазоном, когда два поля заполнены.
когда SELECT
Кроме того, вы всегда можете проверить оба поля без значительной потери скорости или точности. Затем проверьте наличие определенного времени, диапазона времени или, если событие начинается, заканчивается, начинается заново, заканчивается и т. Д., Вы можете проверить наличие различных полей в одной и той же таблице.