我不知道如果不将我的数据重组为父/子关系,这是否可行,但我有2个Elasticsearch索引,一个包含主数据,另一个包含与该数据中的项有关的边界立方体信息。 / p>
两个集合中的项都有匹配的ID,因此如果它存储在SQL数据库中,那么使用内部联接来查找两个表中的详细信息就很简单了。
有没有人知道如何在Elasticsearch中做类似的事情?我调查了各种想法并搜索了类似的问题,但无济于事。
此搜索演示了如何提取我想要交叉引用的相关边界长方体记录...
var boundingSearch = client.Search<Cuboid>(bc => bc.Index(index + "_bounding_cuboids")
.Type("Cuboid")
.Query(
q =>
(q.Range(r => r.OnField(c => c.MinX).GreaterOrEquals(_minPoint.X).LowerOrEquals(_maxPoint.X)) ||
q.Range(r => r.OnField(c => c.MaxX).GreaterOrEquals(_minPoint.X).LowerOrEquals(_maxPoint.X))) &&
(q.Range(r => r.OnField(c => c.MinY).GreaterOrEquals(_minPoint.Y).LowerOrEquals(_maxPoint.Y)) ||
q.Range(r => r.OnField(c => c.MaxY).GreaterOrEquals(_minPoint.Y).LowerOrEquals(_maxPoint.Y))) &&
(q.Range(r => r.OnField(c => c.MinZ).GreaterOrEquals(_minPoint.Z).LowerOrEquals(_maxPoint.Z)) ||
q.Range(r => r.OnField(c => c.MaxZ).GreaterOrEquals(_minPoint.Z).LowerOrEquals(_maxPoint.Z))))
.Size(1000));
目前使用简单搜索搜索主要数据......
search.QueryString(queryText);
我想做的是使边界搜索成为与此搜索一起运行的过滤器(使用其Id字段进行链接),以便仅返回属于给定空间的数据。
感激地收到任何指导。
答案 0 :(得分:0)
要走的路是父子关系。如果联接仅适用于ID并且您的来源已存储,则可以使用terms filter lookup。
对于像查询这样的正确连接,unresolved PR就在那里。但我不确定何时会发布/修复它。