JavaScript — поиск с несколькими значениями диапазона на одном и том же элементе

Я реализую поисковый фильтр через instantsearch.js с ползунком диапазона.

Слайдер фильтрует диапазон лет на основе year столбец данных каждого элемента. В этой базе данных есть некоторые элементы без точного года, но с «предполагаемым» периодом, например «около XVIII секунды» или «Конец 1910-х годов». Это означает, что для этих элементов существует не один год для фильтрации, а несколько лет.

Скажем, для бывших. что я хочу отфильтровать результаты в диапазоне лет с 1874 по 1930 год, и у меня есть пункт «Вторая половина 19-го века» в year поле. Как вы можете сказать, это должно привести к матчу, так как любой год с 1851 по 1900 год подходит для этого пункта.

Как я должен относиться к этому типу данных, чтобы быть частью этого диапазона фильтра?
Как мне структурировать данные в year колонка этой БД?

Должен ли я использовать некоторую логику сценария в поиске JavaScript по алгоритму, а не использовать специальный способ структурирования данных или индексации?

Я думал о такой логике, как:

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

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

Я попытался поискать, но я даже не знаю, как правильно сформулировать эту вещь, которую я спрашиваю … если у вас есть предложения по редактированию заголовка, пожалуйста, скажите мне!

Я использую базу данных MySQL вместе с PHP.

2

Решение

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

Также атрибут должен быть определен как attributeForFaceting в вашей конфигурации индекса.

https://community.algolia.com/instantsearch.js/documentation/#rangeslider

https://community.algolia.com/instantsearch.js/documentation/#numericrefinementlist

1

Другие решения

Учитывая ваш year в качестве диапазона, вы можете добавить beggining и end приписать эти поля. Пример:

EventTimes

id SMALLINT NOT NULL PRIMARY,
yearEnd DATETIME,
yearStart DATETIME

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

когда SELECTКроме того, вы всегда можете проверить оба поля без значительной потери скорости или точности. Затем проверьте наличие определенного времени, диапазона времени или, если событие начинается, заканчивается, начинается заново, заканчивается и т. Д., Вы можете проверить наличие различных полей в одной и той же таблице.

1