【问题标题】:neo4j fails indexing, property size is too longneo4j 索引失败,属性大小太长
【发布时间】:2018-08-29 17:10:30
【问题描述】:

neo4j3.4 使用 lucene_native-2.0 无法为属性创建约束。显然是因为记录太长了

Caused by: java.io.IOException: java.lang.IllegalArgumentException: Max supported key size is 4095, but tried to store key of size 4239 | GB+Tree[file:/var/lib/neo4j/data/databases/graph.db/schema/index/lucene_native-2.0/79/string-1.0/index-79, layout:StringLayout[version:0.1, identifier:24016946018123776], generation:2/4]

好像是这个问题 https://github.com/neo4j/neo4j/issues/9498

但我不明白如何解决它。我对导致问题的记录没有任何反馈

谢谢

贝努瓦

无法创建 CONSTRAINT ON (alias:Alias) ASSERT alias.hr_uuid 是唯一的: ,参考 adb86f6f-33d0-4755-a091-9703840d8156。无法创建 CONSTRAINT ON (alias:Alias) ASSERT alias.hr_uuid 是唯一的: org.neo4j.kernel.impl.query.QueryExecutionKernelException:无法创建约束(别名:别名)断言别名.hr_uuid 是唯一的: 在 org.neo4j.bolt.v1.runtime.TransactionStateMachineSPI$1.start(TransactionStateMachineSPI.java:158) 在 org.neo4j.bolt.v1.runtime.TransactionStateMachine$State.startExecution(TransactionStateMachine.java:446) 在 org.neo4j.bolt.v1.runtime.TransactionStateMachine$State$1.execute(TransactionStateMachine.java:259) 在 org.neo4j.bolt.v1.runtime.TransactionStateMachine$State$1.run(TransactionStateMachine.java:240) 在 org.neo4j.bolt.v1.runtime.TransactionStateMachine.run(TransactionStateMachine.java:81) 在 org.neo4j.bolt.v1.runtime.BoltStateMachine$State$2.run(BoltStateMachine.java:456) 在 org.neo4j.bolt.v1.runtime.BoltStateMachine.run(BoltStateMachine.java:222) 在 org.neo4j.bolt.v1.messaging.BoltMessageRouter.lambda$onRun$3(BoltMessageRouter.java:93) 在 org.neo4j.bolt.runtime.MetricsReportingBoltConnection.lambda$enqueue$0(MetricsReportingBoltConnection.java:69) 在 org.neo4j.bolt.runtime.DefaultBoltConnection.processNextBatch(DefaultBoltConnection.java:193) 在 org.neo4j.bolt.runtime.MetricsReportingBoltConnection.processNextBatch(MetricsReportingBoltConnection.java:87) 在 org.neo4j.bolt.runtime.DefaultBoltConnection.processNextBatch(DefaultBoltConnection.java:143) 在 org.neo4j.bolt.runtime.ExecutorBoltScheduler.executeBatch(ExecutorBoltScheduler.java:163) 在 org.neo4j.bolt.runtime.ExecutorBoltScheduler.lambda$null$0(ExecutorBoltScheduler.java:145) 在 java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 引起:org.neo4j.kernel.impl.query.QueryExecutionKernelException:无法创建约束(别名:别名)断言别名.hr_uuid 是唯一的: 在 org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:65) 在 org.neo4j.bolt.v1.runtime.TransactionStateMachineSPI$1.start(TransactionStateMachineSPI.java:144) ... 17 更多 引起:org.neo4j.cypher.CypherExecutionException:无法创建约束(别名:别名)断言别名.hr_uuid 是唯一的: 在 org.neo4j.cypher.internal.compatibility.v3_4.ExceptionTranslationSupport$class.translateException(ExceptionTranslationSupport.scala:35) 在 org.neo4j.cypher.internal.compatibility.v3_4.ExceptionTranslatingQueryContext.translateException(ExceptionTranslatingQueryContext.scala:41) 在 org.neo4j.cypher.internal.compatibility.v3_4.ExceptionTranslatingQueryContext.createUniqueConstraint(ExceptionTranslatingQueryContext.scala:128) 在 org.neo4j.cypher.internal.runtime.interpreted.UpdateCountingQueryContext.createUniqueConstraint(UpdateCountingQueryContext.scala:125) 在 org.neo4j.cypher.internal.compatibility.v3_4.runtime.executionplan.procs.ProcedureCallOrSchemaCommandExecutionPlanBuilder$$anonfun$6.apply(ProcedureCallOrSchemaCommandExecutionPlanBuilder.scala:80) 在 org.neo4j.cypher.internal.compatibility.v3_4.runtime.executionplan.procs.ProcedureCallOrSchemaCommandExecutionPlanBuilder$$anonfun$6.apply(ProcedureCallOrSchemaCommandExecutionPlanBuilder.scala:78) 在 org.neo4j.cypher.internal.compatibility.v3_4.runtime.executionplan.procs.PureSideEffectExecutionPlan.run(PureSideEffectExecutionPlan.scala:55) 在 org.neo4j.cypher.internal.compatibility.LatestRuntimeVariablePlannerCompatibility$ExecutionPlanWrapper$$anonfun$run$1.apply(LatestRuntimeVariablePlannerCompatibility.scala:128) 在 org.neo4j.cypher.internal.compatibility.LatestRuntimeVariablePlannerCompatibility$ExecutionPlanWrapper$$anonfun$run$1.apply(LatestRuntimeVariablePlannerCompatibility.scala:124) 在 org.neo4j.cypher.exceptionHandler$runSafely$.apply(exceptionHandler.scala:89) 在 org.neo4j.cypher.internal.compatibility.LatestRuntimeVariablePlannerCompatibility$ExecutionPlanWrapper.run(LatestRuntimeVariablePlannerCompatibility.scala:124) 在 org.neo4j.cypher.internal.PreparedPlanExecution.execute(PreparedPlanExecution.scala:29) 在 org.neo4j.cypher.internal.ExecutionEngine.execute(ExecutionEngine.scala:119) 在 org.neo4j.cypher.internal.javacompat.ExecutionEngine.executeQuery(ExecutionEngine.java:61) ... 18 更多 原因:org.neo4j.kernel.api.exceptions.schema.CreateConstraintFailureException:无法创建约束org.neo4j.kernel.api.schema.consttaints.UniquenessConstraintDescriptor@104:现有数据不满足CONSTRAINT ON(标签[10]:标签[10])断言标签[10].property[0]是唯一的:无法填充索引:别名(hr_uuid)[提供者:{key=lucene+native,版本=2.0}][labelId:10,属性[ 0]] 在 org.neo4j.kernel.impl.newapi.Operations.indexBackedConstraintCreate(Operations.java:1217) 在 org.neo4j.kernel.impl.newapi.Operations.uniquePropertyConstraintCreate(Operations.java:922) 在 org.neo4j.cypher.internal.runtime.interpreted.TransactionBoundQueryContext.createUniqueConstraint(TransactionBoundQueryContext.scala:666) 在 org.neo4j.cypher.internal.compatibility.v3_4.ExceptionTranslatingQueryContext$$anonfun$createUniqueConstraint$1.apply$mcZ$sp(ExceptionTranslatingQueryContext.scala:128) 在 org.neo4j.cypher.internal.compatibility.v3_4.ExceptionTranslatingQueryContext$$anonfun$createUniqueConstraint$1.apply(ExceptionTranslatingQueryContext.scala:128) 在 org.neo4j.cypher.internal.compatibility.v3_4.ExceptionTranslatingQueryContext$$anonfun$createUniqueConstraint$1.apply(ExceptionTranslatingQueryContext.scala:128) 在 org.neo4j.cypher.internal.compatibility.v3_4.ExceptionTranslationSupport$class.translateException(ExceptionTranslationSupport.scala:33) ... 31 更多 原因:org.neo4j.kernel.api.exceptions.schema.UniquePropertyValueValidationException: 现有数据不满足 CONSTRAINT ON (label[10]:label[10]) ASSERT label[10].property[0] IS UNIQUE: Failed to为 :Alias(hr_uuid) [provider: {key=lucene+native, version=2.0}] [labelId: 10, properties [0]] 填充索引 在 org.neo4j.kernel.impl.api.state.ConstraintIndexCreator.awaitConstrainIndexPopulation(ConstraintIndexCreator.java:240) 在 org.neo4j.kernel.impl.api.state.ConstraintIndexCreator.createUniquenessConstraintIndex(ConstraintIndexCreator.java:131) 在 org.neo4j.kernel.impl.newapi.Operations.indexBackedConstraintCreate(Operations.java:1202) ... 37 更多 引起:org.neo4j.kernel.api.exceptions.index.IndexPopulationFailedKernelException:无法填充索引:别名(hr_uuid)[提供者:{key=lucene+native,版本=2.0}][labelId:10,属性[0 ]] 在 org.neo4j.kernel.impl.api.index.IndexPopulationFailure$1.asIndexPopulationFailure(IndexPopulationFailure.java:47) 在 org.neo4j.kernel.impl.api.index.FailedIndexProxy.failureCause(FailedIndexProxy.java:80) 在 org.neo4j.kernel.impl.api.index.FailedIndexProxy.awaitStoreScanCompleted(FailedIndexProxy.java:75) 在 org.neo4j.kernel.impl.api.index.FlippableIndexProxy.awaitStoreScanCompleted(FlippableIndexProxy.java:325) 在 org.neo4j.kernel.impl.api.index.AbstractDelegatingIndexProxy.awaitStoreScanCompleted(AbstractDelegatingIndexProxy.java:122) 在 org.neo4j.kernel.impl.api.state.ConstraintIndexCreator.awaitConstrainIndexPopulation(ConstraintIndexCreator.java:228) ... 39 更多 原因:java.io.IOException:java.lang.IllegalArgumentException:最大支持的密钥大小为 4095,但尝试存储大小为 4239 的密钥 | GB+Tree[file:/var/lib/neo4j/data/databases/graph.db/schema/index/lucene_native-2.0/79/string-1.0/index-79, layout:StringLayout[version:0.1, identifier:24016946018123776 ],世代:2/4] 在 org.neo4j.kernel.impl.index.schema.NativeSchemaIndexPopulator.applyWithWorkSync(NativeSchemaIndexPopulator.java:251) 在 org.neo4j.kernel.impl.index.schema.NativeSchemaIndexPopulator.add(NativeSchemaIndexPopulator.java:153) 在 org.neo4j.kernel.impl.index.schema.fusion.FusionIndexPopulator.add(FusionIndexPopulator.java:85) 在 org.neo4j.kernel.impl.api.index.BatchingMultipleIndexPopulator.lambda$flush$2(BatchingMultipleIndexPopulator.java:167) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 在 org.neo4j.helpers.NamedThreadFactory$2.run(NamedThreadFactory.java:110) 原因:java.lang.IllegalArgumentException:最大支持的密钥大小为 4095,但尝试存储大小为 4239 的密钥 | GB+Tree[file:/var/lib/neo4j/data/databases/graph.db/schema/index/lucene_native-2.0/79/string-1.0/index-79, layout:StringLayout[version:0.1, identifier:24016946018123776 ],世代:2/4] 在 org.neo4j.index.internal.gbptree.DynamicSizeUtil.putKeyValueSize(DynamicSizeUtil.java:138) 在 org.neo4j.index.internal.gbptree.TreeNodeDynamicSize.insertKeyValueAt(TreeNodeDynamicSize.java:197) 在 org.neo4j.index.internal.gbptree.TreeNodeDynamicSize.doSplitLeaf(TreeNodeDynamicSize.java:656) 在 org.neo4j.index.internal.gbptree.InternalTreeLogic.splitLeaf(InternalTreeLogic.java:656) 在 org.neo4j.index.internal.gbptree.InternalTreeLogic.doInsertInLeaf(InternalTreeLogic.java:552) 在 org.neo4j.index.internal.gbptree.InternalTreeLogic.insertInLeaf(InternalTreeLogic.java:514) 在 org.neo4j.index.internal.gbptree.InternalTreeLogic.insert(InternalTreeLogic.java:355) 在 org.neo4j.index.internal.gbptree.GBPTree$SingleWriter.merge(GBPTree.java:1192) 在 org.neo4j.kernel.impl.index.schema.NativeSchemaIndexUpdater.processAdd(NativeSchemaIndexUpdater.java:132) 在 org.neo4j.kernel.impl.index.schema.NativeSchemaIndexUpdater.processUpdate(NativeSchemaIndexUpdater.java:86) 在 org.neo4j.kernel.impl.index.schema.NativeSchemaIndexPopulator$IndexUpdateApply.process(NativeSchemaIndexPopulator.java:328) 在 org.neo4j.kernel.impl.index.schema.NativeSchemaIndexPopulator$IndexUpdateWork.apply(NativeSchemaIndexPopulator.java:355) 在 org.neo4j.kernel.impl.index.schema.NativeSchemaIndexPopulator$IndexUpdateWork.apply(NativeSchemaIndexPopulator.java:334) 在 org.neo4j.concurrent.WorkSync.doSynchronizedWork(WorkSync.java:231) 在 org.neo4j.concurrent.WorkSync.tryDoWork(WorkSync.java:157) 在 org.neo4j.concurrent.WorkSync.apply(WorkSync.java:91) 在 org.neo4j.kernel.impl.index.schema.NativeSchemaIndexPopulator.applyWithWorkSync(NativeSchemaIndexPopulator.java:238) ... 7 更多

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    您可以像这样轻松地显示最后的记录:

    MATCH (a:Alias) WITH a ORDER BY size(a.property) DESC LIMIT 1000 RETURN a.property

    【讨论】:

      【解决方案2】:

      我们在操作手册here 中记录了这一点。

      作为一种解决方法,您可以使用过程db.createUniquePropertyConstraint(),为约束传递标签和属性,并将“lucene+native-1.0”作为第二个参数传递以指定索引提供程序(1.0 中没有本地字符串索引所以它会使用lucene)。

      我们同样有 db.createIndex() 用于强制使用特定索引提供程序创建索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-13
        • 1970-01-01
        • 2017-08-12
        • 1970-01-01
        • 2023-03-16
        • 2019-07-14
        相关资源
        最近更新 更多