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

Indexing 是否可以将OrientDB索引键与模式(如运算符)匹配?,indexing,nosql,orientdb,Indexing,Nosql,Orientdb,我想知道是否可以使用类似SQL的运算符进行查询 假设我以以下方式在OrientDB中创建索引: create index packageByName on Package (name) notunique 现在,我可以使用equals(=)运算符查询此索引: select from index:packageByName where key equals 'value' select from index:packageByName where key like 'val%' 这是可行的,

我想知道是否可以使用类似SQL的运算符进行查询

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

create index packageByName on Package (name) notunique
现在,我可以使用equals(
=
)运算符查询此索引:

select from index:packageByName where key equals 'value'
select from index:packageByName where key like 'val%'
这是可行的,但我必须知道要搜索的确切名称。我真正想做的是部分匹配(类
like
操作符):


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

我不确定是否理解您的用例,但我确实明白您在使用
like
运算符查询索引时的行为。下面的查询kludge生成了我认为您正在寻找的结果;它能满足您的预期用途吗

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

如果没有,您可能希望发布到。

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

  CREATE INDEX packageByName ON Package (name) FULLTEXT ENGINE LUCENE
现在,您可以使用Lucene允许的模糊和通配符模式()查询索引:

这些似乎也起作用:

 SELECT * FROM index:packageByName WHERE key = "Sappo*"
 select * from index:packageByName where key like "Sappo*"
在文档中有很多东西我无法完全理解,比如这个gem:我发现如果你想要的房产只有索引(你的LUCENE全文),你也可以直接查询:

SELECT * FROM Package WHERE name LUCENE "Sappo*"
如果属性(
name
在本例中)位于多个索引中,我似乎无法使其工作

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


作为一个拥有20多年历史的成熟数据库,我也很难习惯不让一些神奇的查询分析器在幕后挑选“最佳”索引,但我相信OrientDB最终会变得更加完美。

这在技术上是可行的,但它的性能可能比只查询没有索引的类/集群要差。子查询返回整个索引集,然后像每个记录一样,lucne索引为您工作了吗?@Ray我都不记得了。我已经有一段时间没有使用OrientDB了。请尝试登录服务器以查看顶点和索引。在这里,您将看到如何定义索引
SELECT * FROM Package WHERE name LUCENE "Sappo*"