It may help to know what your definition of "indexing" is. I have a feeling that the way ElasticSearch uses the term may be different than how we use it.
In Neo4j, indexes are used to perform fast lookups of nodes (or relationships, with regard to the fulltext schema index) based on the label of the node and one or more indexed properties. For example, if many of your queries require lookup of :Person nodes by their
name property then an index on
:Person(name) will speed up those node lookups.
When the given property (or properties) are provided inline in the pattern or in a supported predicate in the associated WHERE clause, then the planner will find the node(s) via an index lookup, which is much more efficient than a label scan (checking all nodes of the given label for those where the property/properties match) or an all nodes scan (same thing but for all nodes in the graph).
Index lookups are only used to find starting places in the graph (the planner has to decide which one or ones to use if there are multiple candidates). After the starting nodes are found the remainder of the traversals and matches in the query are usually performed via index-free adjacency, pointer-hopping between node records and their connected relationship records. Indexes are not used for this (as opposed to table joins in RDMBS).
Also, when you create a unique constraint it will also create an index on the label/property.