【发布时间】:2020-08-08 13:29:27
【问题描述】:
我有 2 个索引,一个存储有关事件的数据,另一个存储该事件的可用性。我正在尝试创建一个通过查询获取事件但仅返回可用事件的单个查询,但我在这样做时遇到了困难。
事件索引存储
{
"id" : "152ce52d-e975-4ebd-849a-0a12f535e644",
"createdAt" : 1.5519999143126902E12,
"description" : "A very not so concise description",
"geoHash" : "dnh00x6x5",
"name" : "a name",
...etc...
}
可用性索引存储可用性如下:
{
"eventId" : "152ce52d-e975-4ebd-849a-0a12f535e644",
"maxGuests" : 8,
"availability" : {
"lte" : "2019-10-18T22:15:00.000Z",
"gte" : "2019-10-18T02:30:00.000Z"
}
}
我正在尝试创建如下所示的查询,但我不知道如何通过满足事件索引中的条件并且在可用性索引中可用的列表进行过滤。
GET events,availability/_search
{
"size": 5,
"from": 0,
"_source": [
"id"
],
"query": {
"bool": {
"must": [
{
"geo_distance": {
"distance": "25mi",
"geoHash": {
"lat": 34.0389,
"lon": -84.3826
}
}
}
],
"should": [],
"filter":[
{
"range" : {
"availability" : {
"gte" : "2019-10-31",
"lte" : "2020-11-01",
"relation" : "within"
}
}
}
]
}
}
}
--
我只想做一个查询的原因是客户端期望特定数量的事件。如果我在获取事件数据后过滤掉不可用的事件,那么我可能会得到比客户预期更少的事件,并且需要再次搜索以填补空白。
当然,我也可以合并这两个索引,以便事件也存储可用性信息,但我最初是这样设置的,因为可用性信息每个事件可能有数百或数千个条目。
【问题讨论】:
标签: elasticsearch elasticsearch-dsl elasticsearch-query