Collection Index
An index can be defined on a Collection property (java.util.Collection implementation) or Array. Setting such an index means that each of the Collection's or Array's items is indexed. Setting an index on a Collection / Array done using the SpaceIndex.path() attribute where a Collection / Array property should be followed by "[*]".
You cannot use a SQL function in combination with the collection index; you will get no results.
The following example shows how to define an index on a List of Integers:
@SpaceClass
public class CollectionIndexingExample {
  private Integer id;
  private List<Integer> numbers;
  // Getter and setter methods...
  @SpaceIndex(path="[*]")   // This means that each Integer in the List is indexed.
  public List<Integer> getNumbers() {
    return this.numbers;
  }
}
                                                The following query shows how to use the index:
SQLQuery<CollectionIndexingExample> sqlQuery = new SQLQuery<CollectionIndexingExample>(
    CollectionIndexingExample.class, "numbers[*] = 30");
CollectionIndexingExample[] result = gigaspace.readMultiple(sqlQuery);
                                                See the Free Text Search page for more details.
Nested Property Within a Collection
Its also possible to index a nested property within a collection.
The following example shows how to define an index on Book.id property which resides in a Collection property in Author:
@SpaceClass
public class Author {
  private String name;
  private Collection<Book> books;
  // Getter and setter methods...
  @SpaceIndex(path="[*].id")   // This means that each Book.id in the Collection is indexed.
  public Collection<Book> getBooks() {
    return this.books;
  }
}
public class Book {
  private Integer id;
  private String name;
  // Getter and setter methods...
  public Integer getId() {
    return this.id;
  }
}
                                                The following query shows how to take advantage of the defined index:
SQLQuery<Author> sqlQuery = new SQLQuery<Author>(Author.class, "books[*].id = 57");
Author result = gigaspace.read(sqlQuery);
                                                Setting an index on a Collection within a nested property is also accepted:
@SpaceClass
public class Employee {
  private Long id;
  private Information information;
  // Getter and setter methods...
  @SpaceIndex(path="phoneNumbers[*]")
  public Information getInformation() {
    return this.information;
  }
}
public class Information {
  private Address address;
  private List<String> phoneNumbers;
  // Getter and setter methods...
  public List<String> getPhoneNumbers() {
    return this.phoneNumbers;
  }
}
                                                @SpaceIndex(type=SpaceIndexType.EQUAL), @SpaceIndex(type=SpaceIndexType.ORDERED), and @SpaceIndex(type=SpaceIndexType.EQUAL_AND_ORDERED) are supported.

