我的基本问题是我有三个独立的查询执行空间,时间和关键字搜索。我希望以下面的用例描述的方式将它们组合成一个查询:
用户输入用于搜索文档的关键字。查询返回某些文档。用户然后通过空间搜索缩小他的搜索范围,其中存在空间查询,然后通过时间搜索进一步缩小搜索结果。
关键字查询
"query": {
"match" : { "metadata.o2r.title" : "geosciences" }
}
空间查询
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_shape": {
"metadata.o2r.spatial.geometry": {
"shape": {
"type": "polygon",
"coordinates":
coords
},
"relation": "within"
}
}
}
}
}
}
时间查询
{
"query": {
"bool": {
"must": [{
"range": {
"metadata.o2r.temporal.begin": {
"from": lower
}
}
},
{
"range": {
"metadata.o2r.temporal.end": {
"to": upper
}
}
}
]
}
}
}
基本想法是通过单个查询在特定时间段内为给定位置提供某些关键字的文档
合并查询
"query": {
"bool": {
"must": [ {
"match" : { "metadata.o2r.title" : "geosciences"
}
},
{
"filter": {
"geo_shape": {
"metadata.o2r.spatial.geometry": {
"shape": {
"type": "polygon",
"coordinates": coords
},
"relation": "within"
}
}
}
},
{
"range": {
"metadata.o2r.temporal.begin": {
"from": lower
}
}
},
{
"range": {
"metadata.o2r.temporal.end": {
"to": upper
}
}
}
]
}
}
答案 0 :(得分:0)
我使用bool / match运算符来组合所有查询
{
"query": {
"bool": {
"must": [
{
"range": {
"metadata.o2r.temporal.begin": {
"from": from
}
}
},
{
"range": {
"metadata.o2r.temporal.end": {
"to": to
}
}
},
{
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_shape": {
"metadata.o2r.spatial.geometry": {
"shape": {
"type": "polygon",
"coordinates": coords
},
"relation": "within"
}
}
}
}
},
{
"match" : { "metadata.o2r.title" : "geosciences" }
}
]
}
}
}