在同一项目上搜索多个范围值

Search with multiple range values on same item

我正在通过 instantsearch.js 使用范围滑块实现搜索过滤器。
滑块根据每个项目的 year 数据列筛选年份范围。在这个 DB 中,有些项目没有精确的年份,而是一个“假定的”时期,例如“大约 XVIII 秒”或“1910 年代末”。这意味着对于这些项目,过滤的不是单个年份而是多个年份。

比方说。我希望过滤从 1874 年到 1930 年的年份范围内的结果,并且我在 year 字段中有一个带有“19 世纪下半叶”的项目。如您所知,它应该会导致匹配,因为从 1851 年到 1900 年的任何年份对于此项都是正确的。

我应该如何将此类数据视为此过滤范围的一部分? 我应该如何构建此数据库的 year 列中的数据?

我是否应该在 algolia javascript 搜索中使用一些脚本逻辑,而不是使用特殊的方式来构建数据或索引?
我在想这样的逻辑:

"If value of item is not just digits, convert it to a range of years. Then check if the range of these years can match with the filter required in the slider"

我真的不知道该怎么做,对我来说它看起来有点麻烦和愚蠢。我很确定这不是数据库数据设计中要面对的新问题,因此必须有适当的方法来解决它。

我试着四处搜索,但我什至不知道如何正确表达我要问的这个问题。如果您有编辑标题的建议,请告诉我!

我正在使用 MySQL 数据库以及 PHP。

使用 Algolia,您需要将此值转换为时间戳,然后您才能使用 numericFilter 并将范围滑块或数字优化列表组件添加到您的 UI。

此外,该属性必须在您的索引配置中定义为 attributesForFaceting。

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

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

将您的 year 视为一个范围,您可以向这些字段添加 begginingend 属性。示例:

EventTimes

id SMALLINT NOT NULL PRIMARY,
yearEnd DATETIME,
yearStart DATETIME

在这种情况下,当事件是特定时间时,结束和开始将相等(我使用空结束),并在填充两个字段时成为一个范围。

SELECTing 时,您始终可以检查这两个字段,而不会显着降低速度或准确性。然后检查特定时间、时间范围,或者事件是否开始、结束、重新开始、重新结束等,您可以检查同一 table.

中的不同字段