Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 自定义SchemaIndexProviders和OnlineAccessor_Neo4j - Fatal编程技术网

Neo4j 自定义SchemaIndexProviders和OnlineAccessor

Neo4j 自定义SchemaIndexProviders和OnlineAccessor,neo4j,Neo4j,我正在尝试为Neo4j 2.1.2构建一个自定义索引解决方案。IndexPopulator在索引联机之前获取所有填充事件的通知。但是,在调用getOnlineAccessor之后,IndexAccessor不会收到有关节点和属性更改的通知。我希望process会被这些事件调用。我是否缺少一些关于如何配置自定义索引的信息 提供商工厂: @Service.Implementation(KernelExtensionFactory.class) 公共类IndexProviderFactory扩展了Ke

我正在尝试为Neo4j 2.1.2构建一个自定义索引解决方案。
IndexPopulator
在索引联机之前获取所有填充事件的通知。但是,在调用
getOnlineAccessor
之后,IndexAccessor不会收到有关节点和属性更改的通知。我希望
process
会被这些事件调用。我是否缺少一些关于如何配置自定义索引的信息

提供商工厂:

@Service.Implementation(KernelExtensionFactory.class)
公共类IndexProviderFactory扩展了KernelExtensionFactory{
公共静态最终字符串KEY=“index”;
public SchemaIndexProvider.Descriptor Descriptor=新SchemaIndexProvider.Descriptor(键“1.0”);
私人最终供应商=
新供应商(){
@凌驾
public CustomIndexSchemaProvider get(){
返回新的CustomIndexSchemaProvider();
}
};
公共IndexProviderFactory(){
超级(键);
}
@凌驾
公共生命周期newKernelExtension(依赖项)抛出可丢弃的{
return Suppliers.memoize(provider.get();
}
}
以及大量定制提供程序的实际测试用例:

公共类索引扩展{
静态记录器Logger=Logger.getLogger(IndexTest.class.getName());
静态标签=DynamicLabel.Label(“foo”);
@试验
public void testUpdate()引发异常{
GraphDatabaseService db=new TestGraphDatabaseFactory().NewNompanConstanentDatabase();
try(事务tx=db.beginTx()){
final IndexCreator IndexCreator=db.schema().indexFor(LABEL).on(“bar”);
create();
成功();
}
try(事务tx=db.beginTx()){
db.schema().awaitIndexesOnline(5,TimeUnit.SECONDS);
成功();
}
try(事务tx=db.beginTx()){
Node Node=db.createNode(标签);
node.setProperty(“bar”,1);
成功();
}
db.shutdown();
}
静态接口依赖关系{
Config getConfig();
}
静态类CustomIndexSchemaProvider扩展SchemaIndexProvider{
专用静态最终记录器=记录器
.getLogger(CustomIndexSchemaProvider.class.getName());
LoggingIndex=新的LoggingIndex();
公共CustomIndexSchemaProvider(){
超级(描述符,2);
}
@凌驾
公共字符串getPopulationFailure(长indexId)引发IllegalStateException{
返回null;
}
@凌驾
公共InternalIndexState getInitialState(长索引){
返回InternalIndexState.POPULATING;
}
@凌驾
公共IndexAccessor getOnlineAccessor(长索引,索引配置配置)
抛出IOException{
logger.info(“getOnlineAccessor”+indexId);
收益指数;
}
@凌驾
公共IndexOperator getPopulator(长indexId、IndexDescriptor描述符、,
索引配置(配置){
logger.info(“getPopulator for”+indexId);
收益指数;
}
公共静态类LoggingIndex扩展IndexAccessor。适配器实现IndexPopulator,
索引器{
@凌驾
公共void添加(长节点ID,对象属性值){
logger.info(“添加”+属性值);
}
@凌驾
公共无效进程(NodePropertyUpdate)引发IOException,
IndexEntryConflictException{
logger.info(“进程”+更新);
}
@凌驾
public void remove(Iterable nodeIds)引发IOException{}
@凌驾
public void markAsFailed(字符串失败)引发IOException{}
@凌驾
public void create(){}
@凌驾
公共无效关闭(布尔填充已成功完成){}
@凌驾
public void verifyDeferredConstraints(PropertyAccessor访问器)引发异常{}
@凌驾
public IndexUpdater newPopulatingUpdater(PropertyAccessor访问器)引发IOException{
归还这个;
}
}
}
}

IndexAccessor.Adapter
中,
OnlineIndexProxy
调用
newUpdater
(而不是
newPopulatingUpdater
)。将此添加到我的
日志索引中
解决了以下问题:

@覆盖
公共IndexUpdater新更新程序(IndexUpdateMode模式){
归还这个;
}