gpt4 book ai didi

OrientDB,查找索引插入点

转载 作者:行者123 更新时间:2023-12-02 03:19:34 25 4
gpt4 key购买 nike

我有一个带有“日期”属性的“账单”顶点,并在账单日期上创建了一个自动 SB 树而不是唯一索引以加快搜索速度,现在我希望每个插入的账单都与下一张账单有边并创建一个链接节点结构,

到目前为止我得到的解决方案:

1- 使用 gremlin 计算插入账单的日期与其他所有账单之间的最小差异以获得最接近的账单,但它需要我扫描所有账单并且没有使用索引

2- 我可以获取索引的键并使用 Collections.binarySearch() 并获取插入点的索引,从而获取相邻的账单,

但我想知道是否有其他更好的解决方案来链接账单,以及如何使用 SQL 在 OrientDB 索引中找到插入点,有什么想法吗?

最佳答案

我用一个包含两个类的简单数据库尝试了您的示例:

  • Bill(扩展 V),属性 billDate 作为日期时间;
  • nextBill(扩展 E)。

用这个查询

create vertex Bill set billDate=sysdate(), in_nextBill=(select @rid from Bill where billDate in (select max(billDate) from Bill))

可以同时创建bill和前面提到的edge。

已编辑

我创建了一个 Javascript 函数,它删除两条记录之间的边缘并在前两条记录之间插入一条新记录(具有相对边缘)。该函数接受三个输入参数: * date1: 日期时间格式; * date2: 日期时间格式; * newBillDate: datetime format 是你想在前两个之间插入的新账单的日期;

var g=orient.getGraph();
var d1=g.command('sql','select from Bill where billDate in "'+date1+'"');
var d2=g.command('sql','select from Bill where billDate in "'+date2+'"');
var startDate=d1[0];
var endDate=d2[0];
if(endDate.getRecord().field("billDate").getTime()<startDate.getRecord().field("billDate").getTime()){
var temp=endDate;
endDate=startDate;
startDate=temp;
}
var selectEdge=g.command('sql','select from nextBill where in='+endDate.getId()+' and out='+startDate.getId());
g.command('sql','delete edge '+selectEdge[0].getId());
var newIns=g.command('sql','create vertex Bill set billDate="'+newBillDate+'"');
g.commit();
g.command('sql','create edge nextBill from '+startDate.getRecord().getIdentity()+' to '+newIns.getRecord().getIdentity());
g.command('sql','create edge nextBill from '+newIns.getRecord().getIdentity()+' to '+endDate.getRecord().getIdentity());

关于OrientDB,查找索引插入点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34380093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com