在本指南中,您将了解 Meilisearch 如何处理日期和时间值,如何为索引准备数据集,以及如何按时间顺序排序和筛选搜索结果。
准备文档
要按时间顺序筛选和排序搜索结果,您的文档必须至少包含一个包含 UNIX 时间戳 的字段。您也可以使用可按字典序排序的日期格式字符串,例如 "2025-01-13"。
以视频游戏数据库为例。该数据集中,发行年份以时间戳格式存储:
[
{
"id": 0,
"title": "Return of the Obra Dinn",
"genre": "adventure",
"release_timestamp": 1538949600
},
{
"id": 1,
"title": "The Excavation of Hob's Barrow",
"genre": "adventure",
"release_timestamp": 1664316000
},
{
"id": 2,
"title": "Bayonetta 2",
"genre": "action",
"release_timestamp": 1411164000
}
]
当数据集中的所有文档都包含日期字段后,请按常规方式索引数据。以下示例将一个视频游戏数据集添加到 games 索引:
curl \
-x POST 'MEILISEARCH_URL/indexes/games/documents' \
-h 'content-type: application/json' \
--data-binary @games.json
按日期筛选
要根据时间戳筛选搜索结果,请将文档的时间戳字段添加到 filterableAttributes 列表中:
curl \
-X PUT 'MEILISEARCH_URL/indexes/games/settings/filterable-attributes' \
-H 'Content-Type: application/json' \
--data-binary '[
"release_timestamp"
]'
配置完 filterableAttributes 后,您就可以按日期筛选搜索结果了。以下查询仅返回 2018 年至 2022 年间发行的游戏:
curl \
-X POST 'MEILISEARCH_URL/indexes/games/search' \
-H 'Content-Type: application/json' \
--data-binary '{
"q": "",
"filter": "release_timestamp >= 1514761200 AND release_timestamp < 1672527600"
}'
按日期排序
要按时间顺序对搜索结果进行排序,请将文档的时间戳字段添加到 sortableAttributes 列表中:
curl \
-X PUT 'MEILISEARCH_URL/indexes/games/settings/sortable-attributes' \
-H 'Content-Type: application/json' \
--data-binary '[
"release_timestamp"
]'
配置好 sortableAttributes 后,您就可以根据时间戳对搜索结果进行排序。以下查询会返回所有游戏,并按从最新到最旧的顺序排列:
curl \
-X POST 'MEILISEARCH_URL/indexes/games/search' \
-H 'Content-Type: application/json' \
--data-binary '{
"q": "",
"sort": ["release_timestamp:desc"]
}'