使用orientdb的两个lucene索引进行过滤时,如何最佳地计算类别的命中数(FULLTEXT和SPATIAL)

时间:2015-12-20 12:08:59

标签: lucene database-performance orientdb information-retrieval

我有一个数据模型,我有两个实体类别元素
元素标题描述纬度经度

我有一个有限的类别列表(当时有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查询是快速的,所以我无法理解需要这么长时间。

我希望有人可以帮我写一个更优化的查询!

0 个答案:

没有答案