首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Neo4j UUID和Neo4j弹性搜索插件结合起来

如何将Neo4j UUID和Neo4j弹性搜索插件结合起来
EN

Stack Overflow用户
提问于 2016-04-16 12:04:46
回答 2查看 282关注 0票数 0

如前所述,

http://neo4j.com/docs/stable/transactions-events.html

事务事件侦听器以不可预测的顺序执行。

我想在实体上指定一个UUID,然后将它推到Elastic中,并将该字段编入索引,而不是默认的neo4j @GraphId,后者被专门描述为不好的实践,我理解为什么neo4j UUID插件会被创建。

这些是我试图用来实现这一目标的neo4j的2个文档化插件。

https://github.com/neo4j-contrib/neo4j-elasticsearch https://github.com/graphaware/neo4j-uuid

一个示例neo4j.properties配置将是:

代码语言:javascript
复制
#elasticsearch plugin
elasticsearch.host_name=http://localhost:9200
elasticsearch.index_spec=persons:Person(uuid,name)
#uuid plugin
com.graphaware.module.UIDM.uuidProperty=uuid 

通过尝试创建Person节点,我将得到以下跟踪的异常

代码语言:javascript
复制
   Caused by: org.neo4j.kernel.api.exceptions.TransactionHookException: Transaction handler failed.
    at org.neo4j.kernel.impl.api.TransactionHooks$TransactionHooksState.add(TransactionHooks.java:100)
    at org.neo4j.kernel.impl.api.TransactionHooks.beforeCommit(TransactionHooks.java:59)
    at org.neo4j.kernel.impl.api.KernelTransactionImplementation.commit(KernelTransactionImplementation.java:512)
    ... 37 more
Caused by: org.neo4j.graphdb.NotFoundException: NODE[2] has no property with propertyKey="uuid".
    at org.neo4j.kernel.impl.core.NodeProxy.getProperty(NodeProxy.java:482)
    at org.neo4j.elasticsearch.ElasticSearchEventHandler.nodeToJson(ElasticSearchEventHandler.java:188)
    at org.neo4j.elasticsearch.ElasticSearchEventHandler.indexRequests(ElasticSearchEventHandler.java:119)
    at org.neo4j.elasticsearch.ElasticSearchEventHandler.beforeCommit(ElasticSearchEventHandler.java:47)
    at org.neo4j.elasticsearch.ElasticSearchEventHandler.beforeCommit(ElasticSearchEventHandler.java:27)
    at org.neo4j.kernel.TransactionEventHandlers.beforeCommit(TransactionEventHandlers.java:130)
    at org.neo4j.kernel.TransactionEventHandlers.beforeCommit(TransactionEventHandlers.java:49)
    ... 39 more
Caused by: org.neo4j.kernel.api.exceptions.PropertyNotFoundException: NODE[2] has no property with propertyKeyId=31.
    at org.neo4j.kernel.impl.core.NodeProxy.getProperty(NodeProxy.java:475)
    ... 45 more

如果两个插件不能一起工作,如何实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-16 18:22:38

在使用UUID模块时,可以使用GraphAware Neo4j弹性搜索集成模块,该模块将负责开箱即用。

最小配置之后,您将能够指定哪些节点标签,甚至哪些属性必须进行索引。

票数 3
EN

Stack Overflow用户

发布于 2016-04-16 19:25:10

如果您已经注册了多个TransactionsEventHandler,请注意它们的执行顺序没有定义。内部Neo4j使用CopyOnWriteArraySet,请参阅https://github.com/neo4j/neo4j/blob/3.1/community/kernel/src/main/java/org/neo4j/kernel/internal/TransactionEventHandlers.java#L50

为了解决这个问题,我建议创建一个具有委托列表( uuid处理程序和弹性tx处理程序)的DelegatingTransactionEventHandler,并按顺序执行它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36663963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档