我无法对顶点(或边)的嵌入列表属性执行通配符查询。
例如:
假设我们有一个Person
类,其中包含一个名为Nicknames
的多值属性及其中一个实例:
{
"@type": "d",
"@rid": "#317:0",
"@version": 1,
"@class": "Person",
"Nicknames": [
"zito",
"ziton",
"zitoni"
]
}
然后,
Select FROM Person WHERE Nicknames like "zit%"
返回空结果集,而:
Select FROM Person WHERE Nicknames ="zito"
正确返回1项。
字段NOTUNIQUE_HASH_INDEX
上有Nicknames
个索引。
我尝试了许多方法(包含,索引查询......)但没有运气:(
我可能遗漏了一些基本的东西。
答案 0 :(得分:1)
我知道这不是一个理想的解决方案,我将会写,但是,要坚持你的要求"通过通配符"这是对我有用的唯一方法,因为AVK表示使用Lucene索引更好的工作,但是标准实现我无法让它工作,现在我已经完成了:
使用studio创建一个带有2个参数的javascript函数,名称为" array"和" rule",让我们命名函数" wildcardSearch"
在函数体中过去这段代码(只是简单的javascript改变它,如果它正在做的工作):
for(i=0; i<array.length ; i++){
rule= rule.split("*").join(".*");
rule= rule.split("*").join(".*");
rule= "^" + ruleValue + "$";
var regex = new RegExp(rule);
if (regex.test(array[i]))
return true;
}
return false;
请记住保存功能
现在您可以查询:
Select from Person where wildcardSearch(nicknames,'zit*')=true
注意事项:是一种蛮力方法,但要说明如何有趣&#34;可以使用&#34;存储过程&#34;在OrientDb中,所以无论如何我决定分享它,如果性能是你的主要目标,这不是适合你的,它会扫描所有类并在数组上执行循环以应用正则表达式。索引是一种更好的解决方案,或者使用不同的数据结构更改数据库。
答案 1 :(得分:0)
你可以试试这个:
select from Person where Nicknames containstext 'zit'
希望有所帮助