janusgraph-创建索引出现GraphIndexStatusReport[success=false, indexName='mixedvlabel', targetStatus=[REGIST...

本文详细介绍了在图数据库中因事务未完全关闭导致索引创建失败的问题及解决方案,包括如何检查和关闭未完成的事务,以及如何通过特定命令将索引状态从INSTALLED转换为REGISTERED,并最终启用和重新索引。

参考网址:

https://www.cnblogs.com/Uglthinx/p/9630779.html

原因:我的是事务没有完全关闭

解决办法:

创建一个混合索引:

// 在graph中有事务执行时绝不能创建索引(否则可能导致死锁)
mgmt = graph.openManagement()
vlabel = mgmt.getPropertyKey('vlabel')
// 构建索引
mgmt.buildIndex('mixedvlabel',Vertex.class).addKey(vlabel).buildMixedIndex("search")
mgmt.commit()
//等待索引生效
mgmt.awaitGraphIndexStatus(graph,'mixedvlabel').call()
//对已有数据重新索引
mgmt = graph.openManagement()
mgmt.updateIndex(mgmt.getGraphIndex("mixedvlabel"),SchemaAction.REINDEX).get()
mgmt.commit()

在执行(索引生效的时候出现如下错误)

mgmt.awaitGraphIndexStatus(graph,'mixedvlabel').call()

错误

GraphIndexStatusReport[success=false, indexName='mixedvlabel', targetStatus=[REGISTERED], notConverged={vlabel=INSTALLED}, converged={}, elapsed=PT1M0.07S]

事务没有完全关闭

解决办法

1. 执行关闭事务命令 : graph.tx().rollback()

但是无法完全关闭事务

2. 查看事务 :graph.getOpenTransactions()

3.使用关闭事务命令

for(i=0;i<size;i++) {graph.getOpenTransactions().getAt(0).rollback()}  //size替换为事务的数量

4.执行 REGISTER_INDEX ACTION,使索引状态INSTALLED 转为 REGISTERED

非常关键的一步

mgmt = graph.openManagement()
mgmt.updateIndex(mgmt.getGraphIndex('mixedvlabel'),SchemaAction.REGISTER_INDEX).get()
mgmt.commit()

5.查看索引新的转态

vlabel = mgmt.getPropertyKey('vlabel')
mixedvlabel=mgmt.getGraphIndex('mixedvlabel')
status=mixedvlabel.getIndexStatus(vlabel)

结果为

GraphIndexStatusReport[success=true, indexName='mixedvlabel', targetStatus=[REGISTERED], notConverged={}, converged={vlabel=REGISTERED}, elapsed=PT0S]

6.执行REINDEX与ENABLE_INDEX,完成索引

m = graph.openManagement()
m.updateIndex(m.getGraphIndex('mixedvlabel'), SchemaAction.ENABLE_INDEX).get() 
m.commit() 

ManagementSystem.awaitGraphIndexStatus(graph, 'mixedvlabel').status(SchemaStatus.ENABLED).call()

7.返回结果

GraphIndexStatusReport[success=true, indexName='mixedvlabel', targetStatus=[ENABLED], notConverged={}, converged={vlabel=ENABLED}, elapsed=PT0.006S]

8.更新已有数据的索引

mgmt.updateIndex(mgmt.getGraphIndex("mixedvlabel"),SchemaAction.REINDEX).get()

注:如果数据量很大的话,需要时间长

 

转载于:https://www.cnblogs.com/learndata/p/10757661.html

el-select v-model="item2.indexValue" :placeholder="'请选择' + item2.indexName" style="width: 90%"> <el-option v-for="option in item2.configCustomerPackagesIndexList" :key="option.id" :label="option.indexName" :value="option.id"> </el-option> </el-select>在该值变化后,使用js在该元素后面紧跟着添加<el-col :span="6" v-for="(item2, index2) in item1.items" :key="index2"> <el-form-item :label="item2.indexName + ':'" prop="indexValue" :label-width="item2.indexAttri == '2' ? '70px' : '120px' "> <template v-if="item2.indexAttri == '1'"> </template> <template v-else-if="item2.indexAttri == '2'"> 交易基准价{{ item2.indexValue.split(",")[0] }}(交易基准价{{ item2.indexValue.split(",")[1] }}参考电价)*分成比例 </template> <template v-else-if="item2.indexAttri == '3'"> <el-input v-model="item2.indexValue" type="number" style="width: 90%"></el-input> </template> <template v-else-if="item2.indexAttri == '4'"> <el-select v-model="item2.indexValue" :placeholder="'请选择' + item2.indexName" style="width: 90%"> <el-option v-for="option in item2.configCustomerPackagesIndexList" :key="option.id" :label="option.indexName" :value="option.id"> </el-option> </el-select> <!-- <el-select v-model="item2.indexValue" :placeholder="'请选择' + item2.indexName" v-if="item2.selectType == 'select'" style="width: 90%"> <el-option v-for="option in item2.optionList" :key="option.value" :label="option.label" :value="option.value"> </el-option> </el-select> <el-cascader v-model="item2.indexValue" :options="item2.optionList" v-if="item2.selectType == 'cascader'" style="width: 90%"></el-cascader> --> </template> <template v-else-if="item2.indexAttri == '5'"> <el-switch v-model="item2.indexValue" active-value="1" inactive-value="0"> </el-switch> </template> </el-form-item> </el-col>
最新发布
10-29
<think>好的,用户想了解Elasticsearch Go客户端中Indices.Exists方法的用法,并希望有一个示例。首先,我需要回忆一下Elasticsearch的Go客户端库的结构。通常,Indices相关的操作会放在客户端的Indices服务下。对于检查索引是否存在,Indices.Exists方法应该是正确的选择。 接下来,我需要确认该方法的参数。通常,这个方法需要传入一个索引名称,可能还需要一个Context参数。然后,它应该返回一个响应对象一个错误。用户可能需要处理不同的响应状态,比如200存在,404不存在,或者其他错误情况。 然后,我需要考虑如何编写示例代码。首先要导入必要的包,比如elasticsearchesapi。然后初始化客户端,这里需要注意错误处理。接着调用Indices.Exists方法,传递索引名称。处理响应时,需要检查响应的状态码,并给出相应的提示,比如存在、不存在或其他错误。 另外,用户可能想知道这个方法在实际应用中的使用场景,比如在创建索引前检查是否存在,或者在删除前确认。同时,需要注意Elasticsearch的版本兼容性,不同版本的客户端可能有细微差别,需要提醒用户根据自己使用的版本来调整代码。 还需要考虑可能的错误处理,比如网络问题或权限不足的情况,这时候应该返回错误信息。最后,结合用户提供的引用内容,特别是引用[3]中提到ES不是可靠的存储系统,可能需要提醒用户即使索引存在,也不能完全保证数据可靠性,需要结合其他机制确保数据安全。</think>### Elasticsearch Go client中Indices.Exists方法使用说明 Indices.Exists方法用于验证指定索引是否存在,是Elasticsearch Go客户端操作索引的基础API。以下是具体实现步骤: **1. 初始化客户端** ```go import ( "context" "github.com/elastic/go-elasticsearch/v8" ) func main() { cfg := elasticsearch.Config{ Addresses: []string{"http://localhost:9200"}, } es, err := elasticsearch.NewClient(cfg) if err != nil { // 处理客户端初始化错误 } } ``` **2. 调用Indices.Exists方法** ```go indexName := "my_index" exists, err := es.Indices.Exists( []string{indexName}, es.Indices.Exists.WithContext(context.Background()), ) ``` **3. 处理响应结果** ```go if exists.StatusCode == 200 { // 索引存在时执行 } else if exists.StatusCode == 404 { // 索引不存在时执行 } else { // 处理其他错误状态 } ``` **4. 完整示例代码** ```go resp, err := es.Indices.Exists([]string{"test_index"}) if err != nil { // 处理客户端请求错误 } switch { case resp.StatusCode == 200: fmt.Println("索引已存在") case resp.StatusCode == 404: fmt.Println("索引不存在") default: fmt.Printf("请求异常,状态码:%d\n", resp.StatusCode) } ``` **典型应用场景**: 1. 创建索引前的存在性校验 2. 删除索引前的安全确认 3. 索引自动化管理流程 4. 系统启动时的索引状态检查 **注意事项**: - 需要elasticsearch/go客户端v7或更高版本支持 - 索引名称支持通配符匹配(如`log-*`) - 返回结果不包含索引元数据信息[^3] - 建议配合`Indices.Get`方法获取详细索引配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值