是否可以将OrientDB索引键与模式(LIKE运算符)进行匹配?

时间:2014-02-28 21:58:50

标签: indexing nosql orientdb

我想知道是否可以使用SQL LIKE运算符查询OrientDB indexes

假设我以下列方式在OrientDB中创建索引:

create index packageByName on Package (name) notunique

现在我可以使用equals(=)运算符查询此索引:

select from index:packageByName where key equals 'value'

这有效,但我必须知道要搜索的确切名称。我真正想做的是部分匹配(LIKE运算符):

select from index:packageByName where key like 'val%'

虽然后一个命令没有失败,但它也找不到任何东西。在查询索引时,OrientDB是否支持模式匹配?

2 个答案:

答案 0 :(得分:1)

我发现获得通配符模式匹配的一种方法是使用LUCENE FULLTEXT索引。

  CREATE INDEX packageByName ON Package (name) FULLTEXT ENGINE LUCENE

现在您可以使用Lucene允许的模糊和通配符模式(http://lucene.apache.org/core/2_9_4/queryparsersyntax.html)查询索引:

 SELECT * FROM index:packageByName WHERE key lucene "Sappo*"

这些似乎也有效:

 SELECT * FROM index:packageByName WHERE key = "Sappo*"
 select * from index:packageByName where key like "Sappo*"

有很多事情我可以从文档中找到很多东西,比如这个宝石:我发现如果只有你想要的属性索引(你的LUCENE FULLTEXT)也可以直接查询:

SELECT * FROM Package WHERE name LUCENE "Sappo*"

如果属性(在这种情况下为name)位于多个索引中,我似乎无法使其工作。

不知道为什么其他类型的索引不支持通配符(即使是非Lucene FULLTEXT)。

来自一个20多岁的成熟数据库,我也很难习惯没有一个神奇的查询分析器选择最好的'幕后索引,但我确信最终OrientDB会更加精彩。

答案 1 :(得分:0)

我不确定我是否了解您的用例,但我确实看到了您在使用like运算符查询索引时对行为的意思。以下查询 kludge会产生我认为您正在寻找的结果;是否足以满足您的预期用途?

select from (select from index:packageByName) where key like 'val%'

如果没有,您可能希望发布到OrientDB User Group