A method comprising: parsing one or more XML documents to generate a plurality of token lists, each token list of said plurality of token lists being associated with a token that is a unit of a string or a delimited word; for each occurrence of a token in the one or more XML documents, adding an entry to a token list of the plurality of token lists that is associated with the token, wherein the entry specifies a location of a node that contains the token in the one or more XML documents; receiving a full text query for evaluation against content of the one or more XML documents, wherein the full text query specifies one or more tokens and one or more contexts, each context of the one or more contexts being provided by a hierarchical path of labels; using one or more token lists of the plurality of token lists to determine one or more locations, in the one or more XML documents, of one or more nodes that contain the one or more tokens, and using the one or more locations to identify one or more entries, in a node tree index, for the one or more nodes that contain the one or more tokens; wherein the node tree index stores a plurality of entries comprising, for each node of the one or more nodes, an entry that specifies a location of the node within an XML document of the one or more XML documents, and, for each node of the one or more nodes that has a parent, a link to an entry for the parent of the node; determining which nodes of the one or more nodes satisfy the query by traversing the node tree index away from the one or more entries to one or more other entries of one or more ancestors of the one or more nodes, to determine whether walking away from each of the one or more nodes upwards can reach a node that contains the one or more contexts; wherein the method is performed by one or more computing devices. parsing one or more XML documents to generate a plurality of token lists, each token list of said plurality of token lists being associated with a token that is a unit of a string or a delimited word; for each occurrence of a token in the one or more XML documents, adding an entry to a token list of the plurality of token lists that is associated with the token, wherein the entry specifies a location of a node that contains the token in the one or more XML documents; receiving a full text query for evaluation against content of the one or more XML documents, wherein the full text query specifies one or more tokens and one or more contexts, each context of the one or more contexts being provided by a hierarchical path of labels; using one or more token lists of the plurality of token lists to determine one or more locations, in the one or more XML documents, of one or more nodes that contain the one or more tokens, and using the one or more locations to identify one or more entries, in a node tree index, for the one or more nodes that contain the one or more tokens; wherein the node tree index stores a plurality of entries comprising, for each node of the one or more nodes, an entry that specifies a location of the node within an XML document of the one or more XML documents, and, for each node of the one or more nodes that has a parent, a link to an entry for the parent of the node; determining which nodes of the one or more nodes satisfy the query by traversing the node tree index away from the one or more entries to one or more other entries of one or more ancestors of the one or more nodes, to determine whether walking away from each of the one or more nodes upwards can reach a node that contains the one or more contexts; wherein the method is performed by one or more computing devices.