Neo4j:将遗留索引从精确到全文更改

Dan*_*ian 2 lucene rest neo4j

在我的Neo4j(2.1.1社区版)数据库中,我有Lucene遗留索引,称为node_auto_index:

GET http://localhost:7474/db/data/index/node/

{
    "node_auto_index": {
        "template": "http://localhost:7474/db/data/index/node/node_auto_index/{key}/{value}",
        "provider": "lucene",
        "type": "exact"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想将类型从"exact"更改为"fulltext".我怎么能用REST做到这一点?我尝试了以下方法,但它们都没有工作:

删除并重新创建

我在重新创建"fulltext"之前尝试删除它,但它是只读的:

DELETE http://localhost:7474/db/data/index/node/node_auto_index/node_auto_index

{
    "message": "read only index",
    "exception": "UnsupportedOperationException",
    "fullname": "java.lang.UnsupportedOperationException",
    "stacktrace": [
        "org.neo4j.kernel.impl.coreapi.AbstractAutoIndexerImpl$ReadOnlyIndexToIndexAdapter.readOnlyIndex(AbstractAutoIndexerImpl.java:254)",
        "org.neo4j.kernel.impl.coreapi.AbstractAutoIndexerImpl$ReadOnlyIndexToIndexAdapter.delete(AbstractAutoIndexerImpl.java:290)",
        "org.neo4j.server.rest.web.DatabaseActions.removeNodeIndex(DatabaseActions.java:437)",
        "org.neo4j.server.rest.web.RestfulGraphDatabase.deleteNodeIndex(RestfulGraphDatabase.java:935)",
        "java.lang.reflect.Method.invoke(Unknown Source)",
        "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:139)",
        "java.lang.Thread.run(Unknown Source)"
    ]
}
Run Code Online (Sandbox Code Playgroud)

POST替换

POST http://localhost:7474/db/data/index/node/
{
  "name" : "node_auto_index",
  "config" : {
    "to_lower_case" : "true",
    "type" : "fulltext",
    "provider" : "lucene"
  }
}
Run Code Online (Sandbox Code Playgroud)

 

{
    "message": "Supplied index configuration:\n{to_lower_case=true, type=fulltext, provider=lucene}\ndoesn't match stored config in a valid way:\n{provider=lucene, type=exact}\nfor 'node_auto_index'",
    "exception": "IllegalArgumentException",
    "fullname": "java.lang.IllegalArgumentException",
    "stacktrace": [
        "org.neo4j.kernel.impl.coreapi.IndexManagerImpl.assertConfigMatches(IndexManagerImpl.java:168)",
        "org.neo4j.kernel.impl.coreapi.IndexManagerImpl.findIndexConfig(IndexManagerImpl.java:149)",
        "org.neo4j.kernel.impl.coreapi.IndexManagerImpl.getOrCreateIndexConfig(IndexManagerImpl.java:209)",
        "org.neo4j.kernel.impl.coreapi.IndexManagerImpl.getOrCreateNodeIndex(IndexManagerImpl.java:314)",
        "org.neo4j.kernel.impl.coreapi.IndexManagerImpl.forNodes(IndexManagerImpl.java:302)",
        "org.neo4j.server.rest.web.DatabaseActions.createNodeIndex(DatabaseActions.java:398)",
        "org.neo4j.server.rest.web.RestfulGraphDatabase.jsonCreateNodeIndex(RestfulGraphDatabase.java:830)",
        "java.lang.reflect.Method.invoke(Unknown Source)",
        "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:139)",
        "java.lang.Thread.run(Unknown Source)"
    ]
}
Run Code Online (Sandbox Code Playgroud)

ank*_*arg 7

对于这个问题的所有未来读者.

我遇到了类似的情况,并找到了一个更清洁的方法来解决这个问题.请尝试以下步骤,而不是删除node_auto_index.

打开db的shell /命令行:

- neo4j-sh (0)$ index --get-config node_auto_index
- ==> {
- ==> "provider": "lucene",
- ==> "type": "exact"
- ==> }
- neo4j-sh (0)$ index --set-config node_auto_index type fulltext
- ==> INDEX CONFIGURATION CHANGED, INDEX DATA MAY BE INVALID
- neo4j-sh (0)$ index --get-config node_auto_index
- ==> {
- ==> "provider": "lucene",
- ==> "type": "fulltext"
- ==> }
- neo4j-sh (0)$
Run Code Online (Sandbox Code Playgroud)

对我来说工作得很好.希望这可以帮助有需要的人:-)