我有一个数据模型,我有两个实体类别和元素。
元素有标题和描述和纬度和经度。
我有一个有限的类别列表(当时有66个),我想要计算每个类别的其他标准符合的元素数量。
为了快速提高此查询,我有一个优势,从类别到元素 connectedElements ,但我需要确保 connectedElements 在我可以计算之前根据其他标准进行过滤。
我的初步查询:
SELECT $count.count as count, name, id
FROM Category
LET $count = (
SELECT COUNT(*) AS count
FROM $parent.$current.connectedElements
WHERE [name,description] LUCENE 'ipsum'
AND [latitude,longitude,$spatial] NEAR [59.0032396,10.02395,{"maxDistance":100.50186424414406}] )
我认为orientdb的升级确保此查询停止工作,但此查询显示了我想要完成的任务。
显然您必须直接查询元素群集才能使用索引?并且不允许在同一个select语句中同时组合FULLTEXT和SPATIAL Lucene索引? (发现不兼容的条件)
最近的努力导致了这个问题:
SELECT $d.count as count, name, id
FROM Category
LET
$a = (SELECT FROM Element WHERE [name,description] LUCENE 'ipsum'),
$b = (SELECT FROM Element WHERE [latitude,longitude,$spatial] NEAR [59.0032396,10.02395,{"maxDistance":100.50186424414406}]),
$c = (SELECT FROM $a WHERE $current IN $b),
$d = (SELECT COUNT(*) as count FROM $c WHERE $current IN $parent.$current.connectedElements)
理由是每次调用查询时我只需要计算$a
,$b
和$c
,但$d
必须调用一次每类别。我希望这将是一个快速的查询,但事实证明,对于7500 元素的集合,此查询需要13秒,而且到目前为止这太慢了。单个Lucene查询是快速的,所以我无法理解需要这么长时间。
我希望有人可以帮我写一个更优化的查询!