我在OrientDB中有公司顶点,其属性名称代表公司名称。
我需要通过属性名称通过paticular算法搜索那些顶点中的数据。例如,我必须将所有符号转换为小写,删除所有空格并删除一些特殊的符号。
在Postgresql中,我将创建具有实现此算法的函数的函数索引。但问题是,这种功能指数的速度并不能让我满意(在这个指数的20万条记录搜索记录的表中大约需要1秒)。
我如何在OrientDB中实现这样的算法以及它的效率如何?
答案 0 :(得分:1)
要删除空格,请尝试以下JS函数:
var g=orient.getGraph();
var c=g.command('sql','select from Companies');
var b=g.command("sql","select Name.indexOf(' ') from Companies");
var no_space=[];
for(i=0;i<c.length;i++)
{
if(b[i].getProperty("Name")>-1)
{
var company=c[i].getProperty("Name").substring(0,b[i].getProperty("Name"));
company+=c[i].getProperty("Name").substring(b[i].getProperty("Name")+1,c[i].length);
no_space.push(company);
}
}
return no_space;
<强>之前强>
<强>后强>
希望有所帮助
此致
答案 1 :(得分:0)
我使用这个简单的数据集来试试你的情况:
CREATE CLASS Companies EXTENDS V
CREATE PROPERTY Companies.Name STRING
CREATE INDEX Companies.Name ON Companies(Name) NOTUNIQUE_HASH_INDEX
CREATE VERTEX Companies SET Name = 'Company 1'
CREATE VERTEX Companies SET Name = 'Company 2'
CREATE VERTEX Companies SET Name = 'Company 3'
CREATE VERTEX Companies SET Name = 'Company 4'
CREATE VERTEX Companies SET Name = 'Company 5'
CREATE VERTEX Companies SET Name = 'Company 6'
1。按定义的算法搜索顶点:
要检索您要查找的结果,您可以使用OrientSQL methods .toLowerCase()
和LIKE
运算符来实施查询。 E.g:
SELECT Name FROM Companies WHERE Name.toLowerCase() LIKE 'comp%1'
----+------+---------
# |@CLASS|Name
----+------+---------
0 |null |Company 1
----+------+---------
您还可以创建包含查询的函数:
2。关于索引选择,HASH_INDEX
(我使用了NOTUNIQUE_HASH_INDEX
)会更好,因为它对大数字更实用(比如你的情况)它有许多优点,如here
<强> EDITED 强>
我创建了此功能以举例说明(inputName
参数是您正在寻找的公司Name
):
创建函数后,可以使用OSQL调用它:
<强> STUDIO:强>
<强> CONSOLE:强>
SELECT EXPAND(myFunction3('company1'))
----+-----+---------+---------
# |@RID |@CLASS |Name
----+-----+---------+---------
0 |#12:0|Companies|Company 1
----+-----+---------+---------
1 item(s) found. Query executed in 0.015 sec(s).
关于效果,我不知道数据集的复杂性(例如字段的数量和类型),这很难说。您可以测试并使用这些示例作为创建许多更复杂的自定义函数的起点。
希望它有所帮助。