考虑一个非常简单的模型,其中我们有位置,每个位置可以有零个或多个事件。位置将具有名称、描述和地理点数据(经度/纬度)等属性。一个事件应该附加到一个位置(它的父级)并且应该有一个名称和描述。
{
"location" : {
"properties": {
"name": { "type": "string", "boost": 2.0, "analyzer": "snowball" },
"description": { "type": "string", "analyzer": "snowball" },
"geo": { "type": "geo_point" },
"exhibits": {
"type": "nested",
"properties": {
"name": { "type": "string", "boost": 2.0, "analyzer": "snowball" },
"description": { "type": "string", "analyzer": "snowball" }
}
}
}
}
}
我想要做的是查询子文档(事件),对其名称和描述执行全文搜索。我想取回匹配的事件,并能够获得其父位置的名称。我还想按位置坐标缩小结果集的范围。我不想得到任何与查询不匹配的事件。这在 Elastic Search 中可行吗?我应该使用什么类型的查询?
我尝试将事件作为数组属性放在位置下(见上文)并使用nested
查询,但它没有返回我想要的结果(我认为它返回整个位置,包括所有事件,甚至那些不匹配的事件我的查询)。我尝试将事件放入提供 _parent 属性的单独索引(映射?),然后top_children
对位置执行查询,但没有得到任何结果。
{
"exhibit": {
"_parent": { "type": "locations" },
"properties": {
"name": { "type": "string", "boost": 2.0, "analyzer": "snowball" },
"description": { "type": "string", "analyzer": "snowball" }
}
}
}
任何人都可以解释一下吗?我不知道从哪里开始...