我想知道是否可以使用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是否支持模式匹配?
答案 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。