OrientDB嵌入式列表(字符串):Wildcard查询



我无法在顶点的嵌入式列表(或边缘(上执行通配符 - Query。

例如:假设我们有一个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

我尝试了多种方法(包含,索引 - Query ...(,没有运气:(

我可能缺少基本的东西。

我知道不是我要写的理想解决方案AVK表示,使用Lucene索引是一个更好的想法,但是对于标准实施,我无法让它起作用,现在在这里我所做的工作:

使用Studio创建一个带有2个参数的JavaScript函数,带有名称" Array"one_answers" Rule",让我们命名函数" Wildcardsearch"

在函数正文中超过此代码(如果dosent执行工作,只是简单的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;

记住保存fucntion

现在您可以查询:

Select from Person where wildcardSearch(nicknames,'zit*')=true

注意事项:是一种蛮力的方法,但要显示如何使用OrientDB中的"存储过程"来播放"有趣"您,它会扫描所有课程,并在数组上进行循环以应用正则表达式。索引是一种更好的解决方案,或使用不同的数据结构更改DB。

您可以尝试以下方法:

select from Person where Nicknames containstext 'zit'

希望有帮助

最新更新