The normal REST endpoint only has transactions in the form of
batches. This means that either all or none of the actions in a batch
get applied to the database. This is great when the database is used
standalone, and the only source of problems are the actions in the
batch. For integration into a larger framework, e.g. plone, this isn't
enough. An error can happen after the batch successfully was applied to
the database, e.g. in some event handler that gets called later
For this a transactional HTTP endpoint exists. This only supports cypher queries though. There doesn't seem to be support in cypher for write actions on nodes in legacy indexes. This means effectively means that there is no (uncomplex) way of using legacy indexes in transactions.
The only way out seem to be auto_indexes (for fulltext) and Label indexes (Schema). The first doesn't need special write actions from cyphter
Labels and Indexing
Autoindexing can be activated in the neo4j.properties. The names of
the indexes are fixed, node_auto_index and relationship_auto_index. The
indexed attributes need to be set there as well.
Using the REST api one can create arbitary indexes, which can also be fulltext indexes. Existing indexes will be overwritten. Overwriting node_auto_index is possible, so that the auto index can be turned into a fulltext index.
'Normal' (a.k.a legacy) indexes need to have the objects added and removed manually. This can be done using the standard REST api, but not using cypher. As the transactional REST endpoint only supports cypher, this means not adding of objects during a transaction.
One can assign labels.
CREATE thing:Label or MATCH thing where thing.name='thing' set thing :Label #set one label or MATCH thing where thing.name='thing' set thing :Label:Label2 #set two labels or MATCH thing where thing.name='thing' set thing :Label3 #to add another label
These labels get automatically indexed. One can also set properties to be labeled within these label indexes:
create index on :Label(name) #sets attribute name to be indexed
These label property indexes get automatically indexed as well.