You are currently browsing legacy 4.0 version of documentation. Click here to switch to the newest 4.2 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

Indexes: Storing Data in Index

Once the tokenization and analysis process is completed, the resulting tokens, created according to the used analyzer, are stored in the index. By default, tokens saved in the index are available for searching. but their original field values aren't stored.

Lucene allows you to store the original field text (before it is analyzed) as well. This feature is exposed in the index definition object as the Storage property of the IndexFieldOptions.

Enabling field storing causes original values will be available for retrieval when doing projections.

public static class Employees_ByFirstAndLastName extends AbstractIndexCreationTask {
    public Employees_ByFirstAndLastName() {
        map =  "docs.Employees.Select(employee => new {" +
            "    FirstName = employee.FirstName," +
            "    LastName = employee.LastName" +
            "})";

        store("FirstName", FieldStorage.YES);
        store("LastName", FieldStorage.YES);
    }
}
IndexDefinition indexDefinition = new IndexDefinition();
indexDefinition.setName("Employees_ByFirstAndLastName");
indexDefinition.setMaps(Collections.singleton("docs.Employees.Select(employee => new {" +
    "    FirstName = employee.FirstName," +
    "    LastName = employee.LastName" +
    "})"));

java.util.Map<String, IndexFieldOptions> fields = new HashMap<>();
indexDefinition.setFields(fields);

IndexFieldOptions firstNameOptions = new IndexFieldOptions();
firstNameOptions.setStorage(FieldStorage.YES);
fields.put("FirstName", firstNameOptions);

IndexFieldOptions lastNameOptions = new IndexFieldOptions();
lastNameOptions.setStorage(FieldStorage.YES);
fields.put("LastName", lastNameOptions);

store
    .maintenance()
    .send(new PutIndexesOperation(indexDefinition));

Remarks

Information

Default Storage value for each field is FieldStorage.NO. Keep in mind that storing fields will increase disk space usage.

Info

If the projection requires only the fields that are stored, then the document will not be loaded from the storage and the query results will come directly from the index. This can increase query performance at the cost of disk space used.