我正在尝试制作像Airbnb(汽车)这样的搜索引擎,在搜索时,您需要过滤distance
并检查项目的可用性(如果已在日期中保留)我正在寻找,它不应该是一个打击)。这意味着搜索的日期范围需要针对每个未来的预订日期范围进行检查。
在MongoDB数据库中,我目前将项目的预订日期存储为日期对象数组:
// Future reservations:
[{startDate: d1, endDate: d2}, {startDate: d3, endDate: d4}, ...]
我不确定如何在ElasticSearch中映射它,以及如何过滤掉搜索日期范围内日期范围下降的文档。
这个查询对象是我到目前为止所有:
{
"filtered" : {
"query" : {
"multi_match" : {
"query" : "white toyota",
"fields" : [ "title^2", "description" ]
}
},
"filter" : {
"geo_distance" : {
"distance" : "50km",
"location" : [-122.3050, 37.9174]
}
} // * Add another filter to check start and end dates not fall on future reservation dates
}
};
(请注意我对ElasticSearch没有多少经验)
以下是示例数据:
{
title: "Toyota Camry",
description: "Lorem ipsum dolor sit amet, wisi option nam an. Eam ad vulputate expetendis, equidem omnesque efficiantur mei at. Us"
pricePerDay: 90,
location: [-126.3050, 37.9174],
upcomingReservations: [
{startDate: "05/03/2015", endDate: "05/10/2015"},
{startDate: "05/15/2015", endDate: "05/18/2015"}
]
}
我想我会在Mongo中有一个单独的预约集合,但是我会在将数据转换为ElasticSearch时对日期进行非规范化(如上面upcomingReservations
所示)。
现在,如果我搜索"丰田",日期" 04/30/2015"到" 05/02 / 2015"在远处,我应该受到打击。但是,如果我选择日期范围为" 05/17/2015" - " 05/21/2015",它不应该是一个打击,因为未来的保留之一属于该范围。
PS。数据格式可以更改。我只是想将来保留,因为dateRange对象的数组会很有用。