[
  {
    "path": ".gitignore",
    "content": "atlassian-ide-plugin.xml\n\n## Ignore svn files\n.svn\n\n## ignore any target dir\ntarget\n\n##ignore only top level data dir - local node data files for unit tests\n/data\n\n## Ignore project files created by Eclipse\n.settings\n.project\n.classpath\n\n## Ignore project files created by IntelliJ IDEA\n*.iml\n*.ipr\n*.iws\n.idea\n"
  },
  {
    "path": "README.md",
    "content": "spring-data-elasticsearch-sample-application\n============================================\n\nSpring Data Elasticsearch Sample Application"
  },
  {
    "path": "pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n\n    <groupId>spring-data-elasticsearch-sample-application</groupId>\n    <artifactId>spring-data-elasticsearch-sample-application</artifactId>\n    <version>1.0-SNAPSHOT</version>\n\n    <properties>\n        <junit.version>4.11</junit.version>\n        <spring.version>4.0.0.RELEASE</spring.version>\n    </properties>\n\n    <profiles>\n        <profile>\n            <id>default</id>\n            <activation>\n                <activeByDefault>true</activeByDefault>\n            </activation>\n            <repositories>\n            <repository>\n                <id>spring-milestone</id>\n                <name>Spring Maven Milestone Repository</name>\n                <url>http://repo.springsource.org/libs-milestone</url>\n            </repository>\n                <repository>\n                    <id>com.springsource.repository.maven.snapshot</id>\n                    <url>http://maven.springframework.org/snapshot/</url>\n                    <snapshots>\n                        <enabled>true</enabled>\n                    </snapshots>\n                </repository>\n            </repositories>\n            <pluginRepositories>\n                <pluginRepository>\n                    <id>com.springsource.repository.bundles.release</id>\n                    <url>http://repository.springsource.com/maven/bundles/release</url>\n                </pluginRepository>\n                <pluginRepository>\n                    <id>central</id>\n                    <name>Central Repository</name>\n                    <url>http://repo.maven.apache.org/maven2</url>\n                    <layout>default</layout>\n                    <snapshots>\n                        <enabled>false</enabled>\n                    </snapshots>\n                    <releases>\n                        <updatePolicy>never</updatePolicy>\n                    </releases>\n                </pluginRepository>\n            </pluginRepositories>\n        </profile>\n    </profiles>\n\n    <licenses>\n        <license>\n            <name>The Apache Software License, Version 2.0</name>\n            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>\n            <distribution>repo</distribution>\n            <comments>\n                Copyright 2013 the original author or authors.\n\n                Licensed under the Apache License, Version 2.0 (the \"License\");\n                you may not use this file except in compliance with the License.\n                You may obtain a copy of the License at\n\n                http://www.apache.org/licenses/LICENSE-2.0\n\n                Unless required by applicable law or agreed to in writing, software\n                distributed under the License is distributed on an \"AS IS\" BASIS,\n                WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n                implied.\n                See the License for the specific language governing permissions and\n                limitations under the License.\n            </comments>\n        </license>\n    </licenses>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.data</groupId>\n            <artifactId>spring-data-elasticsearch</artifactId>\n            <version>1.2.0.RELEASE</version>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework</groupId>\n            <artifactId>spring-context</artifactId>\n            <version>${spring.version}</version>\n            <exclusions>\n                <exclusion>\n                    <groupId>commons-logging</groupId>\n                    <artifactId>commons-logging</artifactId>\n                </exclusion>\n            </exclusions>\n        </dependency>\n        <dependency>\n            <groupId>org.springframework</groupId>\n            <artifactId>spring-test</artifactId>\n            <version>${spring.version}</version>\n            <scope>test</scope>\n        </dependency>\n        <dependency>\n            <groupId>junit</groupId>\n            <artifactId>junit</artifactId>\n            <version>${junit.version}</version>\n            <scope>test</scope>\n        </dependency>\n        <dependency>\n            <groupId>commons-logging</groupId>\n            <artifactId>commons-logging</artifactId>\n            <version>1.1.1</version>\n        </dependency>\n    </dependencies>\n\n</project>"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/Article.java",
    "content": "package org.springframework.data.elasticsearch.entities;\n\nimport org.springframework.data.annotation.Id;\nimport org.springframework.data.elasticsearch.annotations.Document;\nimport org.springframework.data.elasticsearch.annotations.Field;\nimport org.springframework.data.elasticsearch.annotations.MultiField;\nimport org.springframework.data.elasticsearch.annotations.NestedField;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.List;\n\nimport static org.springframework.data.elasticsearch.annotations.FieldIndex.analyzed;\nimport static org.springframework.data.elasticsearch.annotations.FieldIndex.not_analyzed;\nimport static org.springframework.data.elasticsearch.annotations.FieldType.Integer;\nimport static org.springframework.data.elasticsearch.annotations.FieldType.String;\n\n@Document(indexName = \"articles\", type = \"article\", shards = 1, replicas = 0, refreshInterval = \"-1\", indexStoreType = \"memory\")\npublic class Article {\n\n    @Id\n    private String id;\n\n    private String title;\n\n    @MultiField(\n            mainField = @Field(type = String, index = analyzed),\n            otherFields = {\n                    @NestedField(dotSuffix = \"untouched\", type = String, store = true, index = not_analyzed),\n                    @NestedField(dotSuffix = \"sort\", type = String, store = true, indexAnalyzer = \"keyword\")\n            }\n    )\n    private List<String> authors = new ArrayList<String>();\n\n    @Field(type = Integer, store = true)\n    private List<Integer> publishedYears = new ArrayList<Integer>();\n\n    @Field(type = String, store = true)\n    private Collection<String> tags = new ArrayList<String>();\n\n    private int score;\n\n    public Article() {\n\n    }\n\n    public Article(String id) {\n        this.id = id;\n    }\n\n    public void setId(String id) {\n        this.id = id;\n    }\n\n    public String getId() {\n        return id;\n    }\n\n    public String getTitle() {\n        return title;\n    }\n\n    public void setTitle(String title) {\n        this.title = title;\n    }\n\n    public List<String> getAuthors() {\n        return authors;\n    }\n\n    public void setAuthors(List<String> authors) {\n        this.authors = authors;\n    }\n\n    public List<Integer> getPublishedYears() {\n        return publishedYears;\n    }\n\n    public void setPublishedYears(List<Integer> publishedYears) {\n        this.publishedYears = publishedYears;\n    }\n\n    public int getScore() {\n        return score;\n    }\n\n    public void setScore(int score) {\n        this.score = score;\n    }\n\n    public Collection<String> getTags() {\n        return tags;\n    }\n\n    public void setTags(Collection<String> tags) {\n        this.tags = tags;\n    }\n}\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/ArticleBuilder.java",
    "content": "package org.springframework.data.elasticsearch.entities;\n\nimport org.springframework.data.elasticsearch.core.query.IndexQuery;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class ArticleBuilder {\n\n    private Article result;\n\n    public ArticleBuilder(String id) {\n        result = new Article(id);\n    }\n\n    public ArticleBuilder title(String title) {\n        result.setTitle(title);\n        return this;\n    }\n\n    public ArticleBuilder addAuthor(String author) {\n        result.getAuthors().add(author);\n        return this;\n    }\n\n    public ArticleBuilder addPublishedYear(Integer year) {\n        result.getPublishedYears().add(year);\n        return this;\n    }\n\n    public ArticleBuilder score(int score) {\n        result.setScore(score);\n        return this;\n    }\n\n    public Article build() {\n        return result;\n    }\n\n    public ArticleBuilder addTag(String tag) {\n        List<String> tagsTmp = new ArrayList<String>();\n        if(result.getTags()==null){\n            result.setTags(tagsTmp);\n        }else {\n            tagsTmp = (List<String>) result.getTags();\n        }\n        tagsTmp.add(tag);\n        return this;\n    }\n\n    public IndexQuery buildIndex() {\n        IndexQuery indexQuery = new IndexQuery();\n        indexQuery.setId(result.getId());\n        indexQuery.setObject(result);\n        return indexQuery;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/Author.java",
    "content": "/*\r\n * Copyright 2013 the original author or authors.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\npackage org.springframework.data.elasticsearch.entities;\r\n\r\n/**\r\n * @author Rizwan Idrees\r\n * @author Mohsin Husen\r\n */\r\npublic class Author {\r\n\r\n\tprivate String id;\r\n\tprivate String name;\r\n\r\n\tpublic String getId() {\r\n\t\treturn id;\r\n\t}\r\n\r\n\tpublic void setId(String id) {\r\n\t\tthis.id = id;\r\n\t}\r\n\r\n\tpublic String getName() {\r\n\t\treturn name;\r\n\t}\r\n\r\n\tpublic void setName(String name) {\r\n\t\tthis.name = name;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/Book.java",
    "content": "package org.springframework.data.elasticsearch.entities;\r\n\r\nimport java.util.Collection;\r\nimport java.util.HashMap;\r\nimport java.util.Map;\r\n\r\nimport org.springframework.data.annotation.Id;\r\nimport org.springframework.data.annotation.Version;\r\nimport org.springframework.data.elasticsearch.annotations.Document;\r\nimport org.springframework.data.elasticsearch.annotations.Field;\r\nimport org.springframework.data.elasticsearch.annotations.FieldType;\r\n\r\n@Document(indexName = \"book\",type = \"book\" , shards = 1, replicas = 0, indexStoreType = \"memory\", refreshInterval = \"-1\")\r\npublic class Book {\r\n\r\n    @Id\r\n    private String id;\r\n    private String name;\r\n    private Long price;\r\n    @Version\r\n    private Long version;\r\n\r\n\tpublic Map<Integer, Collection<String>> getBuckets() {\r\n\t\treturn buckets;\r\n\t}\r\n\r\n\tpublic void setBuckets(Map<Integer, Collection<String>> buckets) {\r\n\t\tthis.buckets = buckets;\r\n\t}\r\n\r\n\t@Field(type = FieldType.Nested)\r\n\tprivate Map<Integer, Collection<String>> buckets = new HashMap();\r\n\r\n    public Book(){}\r\n\r\n    public Book(String id, String name,Long version) {\r\n        this.id = id;\r\n        this.name = name;\r\n        this.version = version;\r\n    }\r\n\r\n    public String getId() {\r\n        return id;\r\n    }\r\n\r\n    public void setId(String id) {\r\n        this.id = id;\r\n    }\r\n\r\n    public String getName() {\r\n        return name;\r\n    }\r\n\r\n    public void setName(String name) {\r\n        this.name = name;\r\n    }\r\n\r\n    public Long getPrice() {\r\n        return price;\r\n    }\r\n\r\n    public void setPrice(Long price) {\r\n        this.price = price;\r\n    }\r\n\r\n    public long getVersion() {\r\n        return version;\r\n    }\r\n\r\n    public void setVersion(long version) {\r\n        this.version = version;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/Car.java",
    "content": "/*\r\n * Copyright 2013 the original author or authors.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\npackage org.springframework.data.elasticsearch.entities;\r\n\r\n/**\r\n * @author Rizwan Idrees\r\n * @author Mohsin Husen\r\n * @author Artur Konczak\r\n */\r\npublic class Car {\r\n\r\n    private String name;\r\n    private String model;\r\n\r\n    public String getName() {\r\n        return name;\r\n    }\r\n\r\n    public void setName(String name) {\r\n        this.name = name;\r\n    }\r\n\r\n    public String getModel() {\r\n        return model;\r\n    }\r\n\r\n    public void setModel(String model) {\r\n        this.model = model;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/GirlFriend.java",
    "content": "/*\r\n * Copyright 2014 the original author or authors.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\npackage org.springframework.data.elasticsearch.entities;\r\n\r\nimport java.util.List;\r\n\r\nimport org.springframework.data.elasticsearch.annotations.Field;\r\nimport org.springframework.data.elasticsearch.annotations.FieldType;\r\n\r\n/**\r\n * @author Mohsin Husen\r\n */\r\n\r\npublic class GirlFriend {\r\n\r\n\tprivate String name;\r\n\r\n\tprivate String type;\r\n\r\n\t@Field(type = FieldType.Nested)\r\n\tprivate List<Car> cars;\r\n\r\n\tpublic String getName() {\r\n\t\treturn name;\r\n\t}\r\n\r\n\tpublic void setName(String name) {\r\n\t\tthis.name = name;\r\n\t}\r\n\r\n\tpublic String getType() {\r\n\t\treturn type;\r\n\t}\r\n\r\n\tpublic void setType(String type) {\r\n\t\tthis.type = type;\r\n\t}\r\n\r\n\tpublic List<Car> getCars() {\r\n\t\treturn cars;\r\n\t}\r\n\r\n\tpublic void setCars(List<Car> cars) {\r\n\t\tthis.cars = cars;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/OperationDocument.java",
    "content": "package org.springframework.data.elasticsearch.entities;\n\nimport java.util.Date;\nimport java.util.List;\n\nimport org.springframework.data.annotation.Id;\nimport org.springframework.data.elasticsearch.annotations.*;\n\n/**\n * Created by mohsinhusen on 10/04/15.\n */\n@Document(indexName = \"operations\", type = \"operation\")\npublic class OperationDocument {\n\n\t@Id\n\tprivate Long id;\n\n\t@Field(\n\t\t\ttype = FieldType.String,\n\t\t\tindex = FieldIndex.analyzed,\n\t\t\tsearchAnalyzer = \"standard\",\n\t\t\tindexAnalyzer = \"standard\",\n\t\t\tstore = true\n\t)\n\tprivate String operationName;\n\n\t@Field(\n\t\t\ttype = FieldType.Date,\n\t\t\tindex = FieldIndex.not_analyzed,\n\t\t\tstore = true,\n\t\t\tformat = DateFormat.custom, pattern = \"dd.MM.yyyy hh:mm\"\n\t)\n\tprivate Date dateUp;\n\n\t@Field(\n\t\t\ttype = FieldType.String,\n\t\t\tindex = FieldIndex.not_analyzed,\n\t\t\tstore = false\n\t)\n\tprivate String someTransientData;\n\n\t@Field(type = FieldType.Nested)\n\tprivate List<Sector> sectors;\n\n\tpublic Long getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(Long id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getOperationName() {\n\t\treturn operationName;\n\t}\n\n\tpublic void setOperationName(String operationName) {\n\t\tthis.operationName = operationName;\n\t}\n\n\tpublic Date getDateUp() {\n\t\treturn dateUp;\n\t}\n\n\tpublic void setDateUp(Date dateUp) {\n\t\tthis.dateUp = dateUp;\n\t}\n\n\tpublic String getSomeTransientData() {\n\t\treturn someTransientData;\n\t}\n\n\tpublic void setSomeTransientData(String someTransientData) {\n\t\tthis.someTransientData = someTransientData;\n\t}\n\n\tpublic List<Sector> getSectors() {\n\t\treturn sectors;\n\t}\n\n\tpublic void setSectors(List<Sector> sectors) {\n\t\tthis.sectors = sectors;\n\t}\n}\n\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/Person.java",
    "content": "/*\r\n * Copyright 2013 the original author or authors.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\npackage org.springframework.data.elasticsearch.entities;\r\n\r\n\r\nimport org.springframework.data.annotation.Id;\r\nimport org.springframework.data.elasticsearch.annotations.Document;\r\nimport org.springframework.data.elasticsearch.annotations.Field;\r\nimport org.springframework.data.elasticsearch.annotations.FieldType;\r\n\r\nimport java.util.List;\r\n\r\n/**\r\n * @author Rizwan Idrees\r\n * @author Mohsin Husen\r\n * @author Artur Konczak\r\n */\r\n\r\n@Document( indexName = \"person\" , type = \"user\", indexStoreType = \"memory\", shards = 1, replicas = 0, refreshInterval = \"-1\")\r\npublic class Person {\r\n\r\n    @Id\r\n    private String id;\r\n\r\n    private String name;\r\n\r\n    @Field( type = FieldType.Nested)\r\n    private List<Car> car;\r\n\r\n    public String getId() {\r\n        return id;\r\n    }\r\n\r\n    public void setId(String id) {\r\n        this.id = id;\r\n    }\r\n\r\n    public String getName() {\r\n        return name;\r\n    }\r\n\r\n    public void setName(String name) {\r\n        this.name = name;\r\n    }\r\n\r\n    public List<Car> getCar() {\r\n        return car;\r\n    }\r\n\r\n    public void setCar(List<Car> car) {\r\n        this.car = car;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/PersonMultipleLevelNested.java",
    "content": "/*\r\n * Copyright 2014 the original author or authors.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\npackage org.springframework.data.elasticsearch.entities;\r\n\r\n\r\nimport java.util.List;\r\n\r\nimport org.springframework.data.annotation.Id;\r\nimport org.springframework.data.elasticsearch.annotations.Document;\r\nimport org.springframework.data.elasticsearch.annotations.Field;\r\nimport org.springframework.data.elasticsearch.annotations.FieldType;\r\n\r\n/**\r\n * @author Rizwan Idrees\r\n * @author Mohsin Husen\r\n * @author Artur Konczak\r\n */\r\n\r\n@Document(indexName = \"person-multiple-level-nested\", type = \"user\", indexStoreType = \"memory\", shards = 1, replicas = 0, refreshInterval = \"-1\")\r\npublic class PersonMultipleLevelNested {\r\n\r\n\t@Id\r\n\tprivate String id;\r\n\r\n\tprivate String name;\r\n\r\n\t@Field(type = FieldType.Nested)\r\n\tprivate List<GirlFriend> girlFriends;\r\n\r\n\t@Field(type = FieldType.Nested)\r\n\tprivate List<Car> cars;\r\n\r\n\tpublic String getId() {\r\n\t\treturn id;\r\n\t}\r\n\r\n\tpublic void setId(String id) {\r\n\t\tthis.id = id;\r\n\t}\r\n\r\n\tpublic String getName() {\r\n\t\treturn name;\r\n\t}\r\n\r\n\tpublic void setName(String name) {\r\n\t\tthis.name = name;\r\n\t}\r\n\r\n\tpublic List<GirlFriend> getGirlFriends() {\r\n\t\treturn girlFriends;\r\n\t}\r\n\r\n\tpublic void setGirlFriends(List<GirlFriend> girlFriends) {\r\n\t\tthis.girlFriends = girlFriends;\r\n\t}\r\n\r\n\tpublic List<Car> getCars() {\r\n\t\treturn cars;\r\n\t}\r\n\r\n\tpublic void setCars(List<Car> cars) {\r\n\t\tthis.cars = cars;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/Product.java",
    "content": "package org.springframework.data.elasticsearch.entities;\r\n\r\nimport org.springframework.data.annotation.Id;\r\nimport org.springframework.data.elasticsearch.annotations.Document;\r\n\r\n@Document(indexName = \"book\",type = \"book\" , shards = 1, replicas = 0, indexStoreType = \"memory\", refreshInterval = \"-1\")\r\npublic class Product {\r\n    @Id\r\n    private String id;\r\n    private String name;\r\n    private String description;\r\n    private boolean enabled;\r\n\r\n    public Product() {\r\n    }\r\n\r\n    public Product(String id, String name, String description, boolean enabled) {\r\n        this();\r\n        this.id = id;\r\n        this.name = name;\r\n        this.description = description;\r\n        this.enabled = enabled;\r\n    }\r\n\r\n    public String getId() {\r\n        return id;\r\n    }\r\n\r\n    public void setId(String id) {\r\n        this.id = id;\r\n    }\r\n\r\n    public String getName() {\r\n        return name;\r\n    }\r\n\r\n    public void setName(String name) {\r\n        this.name = name;\r\n    }\r\n\r\n    public String getDescription() {\r\n        return description;\r\n    }\r\n\r\n    public void setDescription(String description) {\r\n        this.description = description;\r\n    }\r\n\r\n    public boolean isEnabled() {\r\n        return enabled;\r\n    }\r\n\r\n    public void setEnabled(boolean enabled) {\r\n        this.enabled = enabled;\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/entities/Sector.java",
    "content": "package org.springframework.data.elasticsearch.entities;\n\n/**\n * Created by mohsinhusen on 10/04/15.\n */\npublic class Sector {\n\n\t private int id;\n\tprivate String sectorName;\n\n\tpublic int getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(int id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getSectorName() {\n\t\treturn sectorName;\n\t}\n\n\tpublic void setSectorName(String sectorName) {\n\t\tthis.sectorName = sectorName;\n\t}\n}\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/repositories/OperationDocumentRepository.java",
    "content": "package org.springframework.data.elasticsearch.repositories;\n\nimport org.springframework.data.elasticsearch.entities.OperationDocument;\nimport org.springframework.data.elasticsearch.repository.ElasticsearchRepository;\n\n/**\n * Created by mohsinhusen on 10/04/15.\n */\npublic interface OperationDocumentRepository  extends ElasticsearchRepository<OperationDocument, Long> {\n\n}\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/repositories/SampleArticleRepository.java",
    "content": "package org.springframework.data.elasticsearch.repositories;\n\nimport org.springframework.data.elasticsearch.entities.Article;\nimport org.springframework.data.elasticsearch.repository.ElasticsearchRepository;\n\npublic interface SampleArticleRepository extends ElasticsearchRepository<Article,String> {\n}\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/repositories/SampleProductRepository.java",
    "content": "package org.springframework.data.elasticsearch.repositories;\r\n\r\nimport org.springframework.data.domain.Pageable;\r\nimport org.springframework.data.elasticsearch.entities.Product;\r\nimport org.springframework.data.elasticsearch.repository.ElasticsearchRepository;\r\n\r\nimport java.util.List;\r\n\r\npublic interface SampleProductRepository extends ElasticsearchRepository<Product,String> {\r\n    List<Product> findByName(String name);\r\n    List<Product> findByName(String name, Pageable pageable);\r\n    List<Product> findByNameAndId(String name, String id);\r\n}\r\n"
  },
  {
    "path": "src/main/java/org/springframework/data/elasticsearch/repositories/book/SampleBookRepository.java",
    "content": "package org.springframework.data.elasticsearch.repositories.book;\r\n\r\n\r\nimport org.springframework.data.domain.Page;\r\nimport org.springframework.data.domain.Pageable;\r\nimport org.springframework.data.elasticsearch.entities.Book;\r\nimport org.springframework.data.elasticsearch.repository.ElasticsearchRepository;\r\n\r\npublic interface SampleBookRepository extends ElasticsearchRepository<Book,String> {\r\n    Page<Book> findByNameAndPrice(String name, Integer price, Pageable pageable);\r\n    Page<Book> findByNameOrPrice(String name, Integer price, Pageable pageable);\r\n    Page<Book> findByName(String name, Pageable pageable);\r\n}\r\n"
  },
  {
    "path": "src/test/java/org/springframework/data/elasticsearch/ComplexNestedTypeContactTests.java",
    "content": "package org.springframework.data.elasticsearch;\n\nimport static org.elasticsearch.index.query.QueryBuilders.*;\nimport static org.hamcrest.core.Is.is;\n\nimport java.util.Arrays;\n\nimport org.elasticsearch.index.query.BoolQueryBuilder;\nimport org.elasticsearch.index.query.QueryBuilder;\nimport org.elasticsearch.index.query.QueryBuilders;\nimport org.junit.Assert;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.elasticsearch.core.ElasticsearchTemplate;\nimport org.springframework.data.elasticsearch.core.query.*;\nimport org.springframework.data.elasticsearch.entities.Contact;\nimport org.springframework.data.elasticsearch.entities.Manuscript;\nimport org.springframework.data.elasticsearch.entities.Role;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\n/**\n * Created by huse01 on 31/03/14.\n */\n\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(\"classpath:/contact-test.xml\")\npublic class ComplexNestedTypeContactTests {\n\n\t@Autowired\n\tprivate ElasticsearchTemplate template;\n\n\t@Before\n\tpublic void before() {\n\t\ttemplate.deleteIndex(Contact.class);\n\t\ttemplate.createIndex(Contact.class);\n\t\ttemplate.putMapping(Contact.class);\n\t}\n\n\t@Test\n\tpublic void test() {\n\n\t\tContact contact1 = new Contact();\n\t\tcontact1.setId(\"1\");\n\t\tcontact1.setName(\"2\");\n\n\t\tManuscript manuscript1 = new Manuscript();\n\t\tmanuscript1.setTitle(\"t1\");\n\t\tmanuscript1.setAbstractText(\"t2\");\n\t\tmanuscript1.setStatus(\"ACCEPTED\");\n\n\t\tRole role1 = new Role();\n\t\trole1.setName(\"role1\");\n\n\t\tRole role2 = new Role();\n\t\trole2.setName(\"role2\");\n\n\t\tmanuscript1.setRole(Arrays.asList(role1, role2));\n\n\t\tManuscript manuscript2 = new Manuscript();\n\t\tmanuscript2.setTitle(\"t1\");\n\t\tmanuscript2.setAbstractText(\"t2\");\n\t\tmanuscript2.setStatus(\"DELETED\");\n\n\t\tRole role3 = new Role();\n\t\trole3.setName(\"role3\");\n\n\t\tmanuscript2.setRole(Arrays.asList(role3));\n\n\t\tcontact1.setManuscripts(Arrays.asList(manuscript1,manuscript2));\n\n\t\tIndexQuery indexQuery = new IndexQueryBuilder().withObject(contact1)\n\t\t\t\t.withIndexName(\"test-contact-test\").withId(contact1.getId())\n\t\t\t\t.withType(\"contact-test-type\").build();\n\n\t\ttemplate.bulkIndex(Arrays.asList(indexQuery));\n\t\ttemplate.refresh(\"test-contact-test\", true);\n\n\t\tBoolQueryBuilder builder = boolQuery();\n\t\tbuilder.must(nestedQuery(\"manuscripts\", termQuery(\"manuscripts.status\", \"ACCEPTED\")))\n\t\t\t\t.must(nestedQuery(\"manuscripts.role\", termQuery(\"manuscripts.role.name\", \"role3\")));\n\n\t\tSearchQuery searchQuery = new NativeSearchQueryBuilder()\n\t\t\t\t.withQuery(builder).build();\n\n\t\tPage<Contact> page  = template.queryForPage(searchQuery, Contact.class);\n\t\tAssert.assertThat(page.getTotalElements(), is(1L));\n\n\t}\n\n}\n"
  },
  {
    "path": "src/test/java/org/springframework/data/elasticsearch/entities/Contact.java",
    "content": "package org.springframework.data.elasticsearch.entities;\n\nimport java.util.List;\nimport java.util.Set;\n\nimport org.springframework.data.annotation.Id;\nimport org.springframework.data.elasticsearch.annotations.Document;\nimport org.springframework.data.elasticsearch.annotations.Field;\nimport org.springframework.data.elasticsearch.annotations.FieldType;\n\n/**\n * Created by huse01 on 31/03/14.\n */\n@Document(indexName = \"test-contact-test\",type = \"contact-test-type\", shards = 1, replicas = 0)\npublic class Contact {\n\n\t@Id\n\tprivate String id;\n\tprivate String name;\n\t@Field(type = FieldType.Nested)\n\tprivate List<Manuscript> manuscripts;\n\n\tpublic String getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(String id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getName() {\n\t\treturn name;\n\t}\n\n\tpublic void setName(String name) {\n\t\tthis.name = name;\n\t}\n\n\tpublic List<Manuscript> getManuscripts() {\n\t\treturn manuscripts;\n\t}\n\n\tpublic void setManuscripts(List<Manuscript> manuscripts) {\n\t\tthis.manuscripts = manuscripts;\n\t}\n}\n"
  },
  {
    "path": "src/test/java/org/springframework/data/elasticsearch/entities/Manuscript.java",
    "content": "package org.springframework.data.elasticsearch.entities;\n\nimport java.util.List;\nimport java.util.Set;\n\nimport org.springframework.data.elasticsearch.annotations.Field;\nimport org.springframework.data.elasticsearch.annotations.FieldIndex;\nimport org.springframework.data.elasticsearch.annotations.FieldType;\n\n/**\n * Created by huse01 on 31/03/14.\n */\npublic class Manuscript {\n\n\tprivate String title;\n\tprivate String abstractText;\n\t@Field(type = FieldType.String, index = FieldIndex.not_analyzed)\n\tprivate String status;\n\t@Field(type = FieldType.Nested)\n\tprivate List<Role> role;\n\n\tpublic String getTitle() {\n\t\treturn title;\n\t}\n\n\tpublic void setTitle(String title) {\n\t\tthis.title = title;\n\t}\n\n\tpublic String getStatus() {\n\t\treturn status;\n\t}\n\n\tpublic void setStatus(String status) {\n\t\tthis.status = status;\n\t}\n\n\tpublic String getAbstractText() {\n\t\treturn abstractText;\n\t}\n\n\tpublic void setAbstractText(String abstractText) {\n\t\tthis.abstractText = abstractText;\n\t}\n\n\tpublic List<Role> getRole() {\n\t\treturn role;\n\t}\n\n\tpublic void setRole(List<Role> role) {\n\t\tthis.role = role;\n\t}\n}\n"
  },
  {
    "path": "src/test/java/org/springframework/data/elasticsearch/entities/Role.java",
    "content": "package org.springframework.data.elasticsearch.entities;\n\n/**\n * Created by huse01 on 31/03/14.\n */\npublic class Role {\n\n\tprivate String name;\n\n\tpublic String getName() {\n\t\treturn name;\n\t}\n\n\tpublic void setName(String name) {\n\t\tthis.name = name;\n\t}\n}\n"
  },
  {
    "path": "src/test/java/org/springframework/data/elasticsearch/repositories/ElasticsearchFacetTests.java",
    "content": "package org.springframework.data.elasticsearch.repositories;\n\nimport org.elasticsearch.index.query.FilterBuilders;\nimport org.elasticsearch.search.facet.FacetBuilders;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.elasticsearch.core.ElasticsearchTemplate;\nimport org.springframework.data.elasticsearch.core.FacetedPage;\nimport org.springframework.data.elasticsearch.core.facet.request.NativeFacetRequest;\nimport org.springframework.data.elasticsearch.core.facet.request.RangeFacetRequestBuilder;\nimport org.springframework.data.elasticsearch.core.facet.request.TermFacetRequestBuilder;\nimport org.springframework.data.elasticsearch.core.facet.result.Range;\nimport org.springframework.data.elasticsearch.core.facet.result.RangeResult;\nimport org.springframework.data.elasticsearch.core.facet.result.Term;\nimport org.springframework.data.elasticsearch.core.facet.result.TermResult;\nimport org.springframework.data.elasticsearch.core.query.IndexQuery;\nimport org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;\nimport org.springframework.data.elasticsearch.core.query.SearchQuery;\nimport org.springframework.data.elasticsearch.entities.Article;\nimport org.springframework.data.elasticsearch.entities.ArticleBuilder;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\nimport static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;\nimport static org.hamcrest.core.Is.is;\nimport static org.hamcrest.core.IsEqual.equalTo;\nimport static org.hamcrest.core.IsNull.nullValue;\nimport static org.junit.Assert.assertThat;\n\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(\"classpath:/springContext-test.xml\")\npublic class ElasticsearchFacetTests {\n\n    public static final String RIZWAN_IDREES = \"Rizwan Idrees\";\n    public static final String MOHSIN_HUSEN = \"Mohsin Husen\";\n    public static final String JONATHAN_YAN = \"Jonathan Yan\";\n    public static final String ARTUR_KONCZAK = \"Artur Konczak\";\n    public static final int YEAR_2002 = 2002;\n    public static final int YEAR_2001 = 2001;\n    public static final int YEAR_2000 = 2000;\n    @Autowired\n    private ElasticsearchTemplate elasticsearchTemplate;\n\n    @Before\n    public void before() {\n        elasticsearchTemplate.deleteIndex(Article.class);\n        elasticsearchTemplate.createIndex(Article.class);\n        elasticsearchTemplate.putMapping(Article.class);\n        elasticsearchTemplate.refresh(Article.class, true);\n\n        IndexQuery article1 = new ArticleBuilder(\"1\").title(\"article four\").addAuthor(RIZWAN_IDREES).addAuthor(ARTUR_KONCZAK).addAuthor(MOHSIN_HUSEN).addAuthor(JONATHAN_YAN).score(10).buildIndex();\n        IndexQuery article2 = new ArticleBuilder(\"2\").title(\"article three\").addAuthor(RIZWAN_IDREES).addAuthor(ARTUR_KONCZAK).addAuthor(MOHSIN_HUSEN).addPublishedYear(YEAR_2000).score(20).buildIndex();\n        IndexQuery article3 = new ArticleBuilder(\"3\").title(\"article two\").addAuthor(RIZWAN_IDREES).addAuthor(ARTUR_KONCZAK).addPublishedYear(YEAR_2001).addPublishedYear(YEAR_2000).score(30).buildIndex();\n        IndexQuery article4 = new ArticleBuilder(\"4\").title(\"article one\").addAuthor(RIZWAN_IDREES).addPublishedYear(YEAR_2002).addPublishedYear(YEAR_2001).addPublishedYear(YEAR_2000).score(40).buildIndex();\n\n        elasticsearchTemplate.index(article1);\n        elasticsearchTemplate.index(article2);\n        elasticsearchTemplate.index(article3);\n        elasticsearchTemplate.index(article4);\n        elasticsearchTemplate.refresh(Article.class, true);\n    }\n\n    @Test\n    public void shouldReturnFacetedAuthorsForGivenQueryWithDefaultOrder() {\n\n        String facetName = \"fauthors\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withFacet(new TermFacetRequestBuilder(facetName).fields(\"authors.untouched\").build()).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(4)));\n\n        TermResult facet = (TermResult) result.getFacet(facetName);\n        Term term = facet.getTerms().get(0);\n        assertThat(term.getTerm(), is(RIZWAN_IDREES));\n        assertThat(term.getCount(), is(4));\n\n        term = facet.getTerms().get(1);\n        assertThat(term.getTerm(), is(ARTUR_KONCZAK));\n        assertThat(term.getCount(), is(3));\n\n        term = facet.getTerms().get(2);\n        assertThat(term.getTerm(), is(MOHSIN_HUSEN));\n        assertThat(term.getCount(), is(2));\n\n        term = facet.getTerms().get(3);\n        assertThat(term.getTerm(), is(JONATHAN_YAN));\n        assertThat(term.getCount(), is(1));\n    }\n\n    @Test\n    public void shouldReturnFacetedAuthorsForGivenFilteredQuery() {\n\n        // given\n        String facetName = \"fauthors\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFilter(FilterBuilders.notFilter(FilterBuilders.termFilter(\"title\", \"four\")))\n                .withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields(\"authors.untouched\").build()).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(3)));\n\n        TermResult facet = (TermResult) result.getFacet(facetName);\n        Term term = facet.getTerms().get(0);\n        assertThat(term.getTerm(), is(RIZWAN_IDREES));\n        assertThat(term.getCount(), is(3));\n\n        term = facet.getTerms().get(1);\n        assertThat(term.getTerm(), is(ARTUR_KONCZAK));\n        assertThat(term.getCount(), is(2));\n\n        term = facet.getTerms().get(2);\n        assertThat(term.getTerm(), is(MOHSIN_HUSEN));\n        assertThat(term.getCount(), is(1));\n    }\n\n    @Test\n    public void shouldExcludeTermsFromFacetedAuthorsForGivenQuery() {\n        // given\n        String facetName = \"fauthors\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFilter(FilterBuilders.notFilter(FilterBuilders.termFilter(\"title\", \"four\")))\n                .withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields(\"authors.untouched\").excludeTerms(RIZWAN_IDREES, ARTUR_KONCZAK).build()).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(3)));\n\n        TermResult facet = (TermResult) result.getFacet(facetName);\n\n        assertThat(facet.getTerms().size(), is(1));\n\n        Term term = facet.getTerms().get(0);\n        assertThat(term.getTerm(), is(MOHSIN_HUSEN));\n        assertThat(term.getCount(), is(1));\n\n    }\n\n    @Test\n    public void shouldReturnFacetedAuthorsForGivenQueryOrderedByTerm() {\n\n        // given\n        String facetName = \"fauthors\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFacet(new TermFacetRequestBuilder(facetName).fields(\"authors.untouched\").ascTerm().build()).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(4)));\n\n        TermResult facet = (TermResult) result.getFacet(facetName);\n        Term term = facet.getTerms().get(0);\n        assertThat(term.getTerm(), is(ARTUR_KONCZAK));\n        assertThat(term.getCount(), is(3));\n\n        term = facet.getTerms().get(1);\n        assertThat(term.getTerm(), is(JONATHAN_YAN));\n        assertThat(term.getCount(), is(1));\n\n        term = facet.getTerms().get(2);\n        assertThat(term.getTerm(), is(MOHSIN_HUSEN));\n        assertThat(term.getCount(), is(2));\n\n        term = facet.getTerms().get(3);\n        assertThat(term.getTerm(), is(RIZWAN_IDREES));\n        assertThat(term.getCount(), is(4));\n\n    }\n\n    @Test\n    public void shouldReturnFacetedAuthorsForGivenQueryOrderedByCountAsc() {\n\n        // given\n        String facetName = \"fauthors\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFacet(new TermFacetRequestBuilder(facetName).fields(\"authors.untouched\").ascCount().build()).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(4)));\n\n        TermResult facet = (TermResult) result.getFacet(facetName);\n        Term term = facet.getTerms().get(0);\n        assertThat(term.getTerm(), is(JONATHAN_YAN));\n        assertThat(term.getCount(), is(1));\n\n        term = facet.getTerms().get(1);\n        assertThat(term.getTerm(), is(MOHSIN_HUSEN));\n        assertThat(term.getCount(), is(2));\n\n        term = facet.getTerms().get(2);\n        assertThat(term.getTerm(), is(ARTUR_KONCZAK));\n        assertThat(term.getCount(), is(3));\n\n        term = facet.getTerms().get(3);\n        assertThat(term.getTerm(), is(RIZWAN_IDREES));\n        assertThat(term.getCount(), is(4));\n    }\n\n    @Test\n    public void shouldReturnFacetedYearsForGivenQuery() {\n\n        // given\n        String facetName = \"fyears\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFacet(new TermFacetRequestBuilder(facetName).fields(\"publishedYears\").descCount().build()).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(4)));\n\n        TermResult facet = (TermResult) result.getFacet(facetName);\n        assertThat(facet.getTerms().size(), is(equalTo(3)));\n\n\n        Term term = facet.getTerms().get(0);\n        assertThat(term.getTerm(), is(Integer.toString(YEAR_2000)));\n        assertThat(term.getCount(), is(3));\n\n        term = facet.getTerms().get(1);\n        assertThat(term.getTerm(), is(Integer.toString(YEAR_2001)));\n        assertThat(term.getCount(), is(2));\n\n        term = facet.getTerms().get(2);\n        assertThat(term.getTerm(), is(Integer.toString(YEAR_2002)));\n        assertThat(term.getCount(), is(1));\n    }\n\n\n    @Test\n    public void shouldReturnSingleFacetOverYearsAndAuthorsForGivenQuery() {\n\n        // given\n        String facetName = \"fyears\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFacet(new TermFacetRequestBuilder(facetName).fields(\"publishedYears\", \"authors.untouched\").ascTerm().build()).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(4)));\n\n        TermResult facet = (TermResult) result.getFacet(facetName);\n        assertThat(facet.getTerms().size(), is(equalTo(7)));\n\n\n        Term term = facet.getTerms().get(0);\n        assertThat(term.getTerm(), is(Integer.toString(YEAR_2000)));\n        assertThat(term.getCount(), is(3));\n\n        term = facet.getTerms().get(1);\n        assertThat(term.getTerm(), is(Integer.toString(YEAR_2001)));\n        assertThat(term.getCount(), is(2));\n\n        term = facet.getTerms().get(2);\n        assertThat(term.getTerm(), is(Integer.toString(YEAR_2002)));\n        assertThat(term.getCount(), is(1));\n\n        term = facet.getTerms().get(3);\n        assertThat(term.getTerm(), is(ARTUR_KONCZAK));\n        assertThat(term.getCount(), is(3));\n\n        term = facet.getTerms().get(4);\n        assertThat(term.getTerm(), is(JONATHAN_YAN));\n        assertThat(term.getCount(), is(1));\n\n        term = facet.getTerms().get(5);\n        assertThat(term.getTerm(), is(MOHSIN_HUSEN));\n        assertThat(term.getCount(), is(2));\n\n        term = facet.getTerms().get(6);\n        assertThat(term.getTerm(), is(RIZWAN_IDREES));\n        assertThat(term.getCount(), is(4));\n\n    }\n\n    @Test\n    public void shouldReturnFacetedYearsAndFacetedAuthorsForGivenQuery() {\n\n        // given\n        String numberFacetName = \"fAuthors\";\n        String stringFacetName = \"fyears\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFacet(new TermFacetRequestBuilder(numberFacetName).fields(\"publishedYears\").ascTerm().build())\n                .withFacet(new TermFacetRequestBuilder(stringFacetName).fields(\"authors.untouched\").ascTerm().build())\n                .build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(4)));\n\n        TermResult numberFacet = (TermResult) result.getFacet(numberFacetName);\n        assertThat(numberFacet.getTerms().size(), is(equalTo(3)));\n\n        Term numberTerm = numberFacet.getTerms().get(0);\n        assertThat(numberTerm.getTerm(), is(Integer.toString(YEAR_2000)));\n        assertThat(numberTerm.getCount(), is(3));\n\n        numberTerm = numberFacet.getTerms().get(1);\n        assertThat(numberTerm.getTerm(), is(Integer.toString(YEAR_2001)));\n        assertThat(numberTerm.getCount(), is(2));\n\n        numberTerm = numberFacet.getTerms().get(2);\n        assertThat(numberTerm.getTerm(), is(Integer.toString(YEAR_2002)));\n        assertThat(numberTerm.getCount(), is(1));\n\n\n        TermResult stringFacet = (TermResult) result.getFacet(stringFacetName);\n        Term stringTerm = stringFacet.getTerms().get(0);\n        assertThat(stringTerm.getTerm(), is(ARTUR_KONCZAK));\n        assertThat(stringTerm.getCount(), is(3));\n\n        stringTerm = stringFacet.getTerms().get(1);\n        assertThat(stringTerm.getTerm(), is(JONATHAN_YAN));\n        assertThat(stringTerm.getCount(), is(1));\n\n        stringTerm = stringFacet.getTerms().get(2);\n        assertThat(stringTerm.getTerm(), is(MOHSIN_HUSEN));\n        assertThat(stringTerm.getCount(), is(2));\n\n        stringTerm = stringFacet.getTerms().get(3);\n        assertThat(stringTerm.getTerm(), is(RIZWAN_IDREES));\n        assertThat(stringTerm.getCount(), is(4));\n    }\n\n\n    @Test\n    public void shouldReturnFacetedYearsForNativeFacet() {\n\n        // given\n        String facetName = \"fyears\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFacet(new NativeFacetRequest(FacetBuilders.termsFacet(facetName).field(\"publishedYears\"))).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(4)));\n\n        TermResult facet = (TermResult) result.getFacet(facetName);\n        assertThat(facet.getTerms().size(), is(equalTo(3)));\n\n\n        Term term = facet.getTerms().get(0);\n        assertThat(term.getTerm(), is(Integer.toString(YEAR_2000)));\n        assertThat(term.getCount(), is(3));\n\n        term = facet.getTerms().get(1);\n        assertThat(term.getTerm(), is(Integer.toString(YEAR_2001)));\n        assertThat(term.getCount(), is(2));\n\n        term = facet.getTerms().get(2);\n        assertThat(term.getTerm(), is(Integer.toString(YEAR_2002)));\n        assertThat(term.getCount(), is(1));\n    }\n\n    @Test\n    public void shouldFilterResultByRegexForGivenQuery() {\n        // given\n        String facetName = \"regex_authors\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFilter(FilterBuilders.notFilter(FilterBuilders.termFilter(\"title\", \"four\")))\n                .withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields(\"authors.untouched\").regex(\"Art.*\").build()).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(3)));\n\n        TermResult facet = (TermResult) result.getFacet(facetName);\n\n        assertThat(facet.getTerms().size(), is(1));\n\n        Term term = facet.getTerms().get(0);\n        assertThat(term.getTerm(), is(ARTUR_KONCZAK));\n        assertThat(term.getCount(), is(2));\n\n    }\n\n    @Test\n    public void shouldReturnAllTermsForGivenQuery() {\n        // given\n        String facetName = \"all_authors\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFilter(FilterBuilders.notFilter(FilterBuilders.termFilter(\"title\", \"four\")))\n                .withFacet(new TermFacetRequestBuilder(facetName).applyQueryFilter().fields(\"authors.untouched\").allTerms().build()).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(3)));\n\n        TermResult facet = (TermResult) result.getFacet(facetName);\n\n        assertThat(facet.getTerms().size(), is(4));\n    }\n\n\n    @Test\n    public void shouldReturnRangeFacetForGivenQuery() {\n        // given\n        String facetName = \"rangeYears\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFacet(\n                        new RangeFacetRequestBuilder(facetName).field(\"publishedYears\")\n                                .to(YEAR_2000).range(YEAR_2000, YEAR_2002).from(YEAR_2002).build()\n                ).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(4)));\n\n        RangeResult facet = (RangeResult) result.getFacet(facetName);\n        assertThat(facet.getRanges().size(), is(equalTo(3)));\n\n\n        Range range = facet.getRanges().get(0);\n        assertThat(range.getFrom(), nullValue());\n        assertThat(range.getTo(), is((double) YEAR_2000));\n        assertThat(range.getCount(), is(0L));\n        assertThat(range.getTotal(), is(0.0));\n\n        range = facet.getRanges().get(1);\n        assertThat(range.getFrom(), is((double) YEAR_2000));\n        assertThat(range.getTo(), is((double) YEAR_2002));\n        assertThat(range.getCount(), is(3L));\n        assertThat(range.getTotal(), is(6000.0));\n\n        range = facet.getRanges().get(2);\n        assertThat(range.getFrom(), is((double) YEAR_2002));\n        assertThat(range.getTo(), nullValue());\n        assertThat(range.getCount(), is(1L));\n        assertThat(range.getTotal(), is(2002.0));\n    }\n\n    @Test\n    public void shouldReturnKeyValueRangeFacetForGivenQuery() {\n        // given\n        String facetName = \"rangeScoreOverYears\";\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())\n                .withFacet(\n                        new RangeFacetRequestBuilder(facetName).fields(\"publishedYears\", \"score\")\n                                .to(YEAR_2000).range(YEAR_2000, YEAR_2002).from(YEAR_2002).build()\n                ).build();\n        // when\n        FacetedPage<Article> result = elasticsearchTemplate.queryForPage(searchQuery, Article.class);\n        // then\n        assertThat(result.getNumberOfElements(), is(equalTo(4)));\n\n        RangeResult facet = (RangeResult) result.getFacet(facetName);\n        assertThat(facet.getRanges().size(), is(equalTo(3)));\n\n\n        Range range = facet.getRanges().get(0);\n        assertThat(range.getFrom(), nullValue());\n        assertThat(range.getTo(), is((double) YEAR_2000));\n        assertThat(range.getCount(), is(0L));\n        assertThat(range.getTotal(), is(0.0));\n\n        range = facet.getRanges().get(1);\n        assertThat(range.getFrom(), is((double) YEAR_2000));\n        assertThat(range.getTo(), is((double) YEAR_2002));\n        assertThat(range.getCount(), is(3L));\n        assertThat(range.getTotal(), is(90.0));\n\n        range = facet.getRanges().get(2);\n        assertThat(range.getFrom(), is((double) YEAR_2002));\n        assertThat(range.getTo(), nullValue());\n        assertThat(range.getCount(), is(1L));\n        assertThat(range.getTotal(), is(40.0));\n    }\n\n\n}\n\n"
  },
  {
    "path": "src/test/java/org/springframework/data/elasticsearch/repositories/NestedObjectTests.java",
    "content": "/*\r\n * Copyright 2013 the original author or authors.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\npackage org.springframework.data.elasticsearch.repositories;\r\n\r\nimport org.elasticsearch.index.query.BoolQueryBuilder;\r\nimport org.elasticsearch.index.query.QueryBuilder;\r\nimport org.junit.Before;\r\nimport org.junit.Test;\r\nimport org.junit.runner.RunWith;\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.data.domain.Page;\r\nimport org.springframework.data.elasticsearch.core.ElasticsearchTemplate;\r\nimport org.springframework.data.elasticsearch.core.query.GetQuery;\r\nimport org.springframework.data.elasticsearch.core.query.IndexQuery;\r\nimport org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;\r\nimport org.springframework.data.elasticsearch.core.query.SearchQuery;\r\nimport org.springframework.data.elasticsearch.entities.*;\r\nimport org.springframework.data.elasticsearch.repositories.book.SampleBookRepository;\r\nimport org.springframework.test.context.ContextConfiguration;\r\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.Arrays;\r\nimport java.util.List;\r\n\r\nimport static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;\r\nimport static org.elasticsearch.index.query.QueryBuilders.boolQuery;\r\nimport static org.elasticsearch.index.query.QueryBuilders.nestedQuery;\r\nimport static org.elasticsearch.index.query.QueryBuilders.termQuery;\r\nimport static org.hamcrest.core.Is.is;\r\nimport static org.hamcrest.core.IsNull.notNullValue;\r\nimport static org.junit.Assert.assertThat;\r\n\r\n/**\r\n * @author Rizwan Idrees\r\n * @author Mohsin Husen\r\n * @author Artur Konczak\r\n */\r\n@RunWith(SpringJUnit4ClassRunner.class)\r\n@ContextConfiguration(\"classpath:/springContext-test.xml\")\r\npublic class NestedObjectTests {\r\n\r\n\t@Autowired\r\n    private ElasticsearchTemplate elasticsearchTemplate;\r\n\r\n    @Autowired\r\n    private SampleBookRepository bookRepository;\r\n\r\n    @Before\r\n    public void before() {\r\n        elasticsearchTemplate.deleteIndex(Book.class);\r\n        elasticsearchTemplate.createIndex(Book.class);\r\n        elasticsearchTemplate.refresh(Book.class, true);\r\n        elasticsearchTemplate.deleteIndex(Person.class);\r\n        elasticsearchTemplate.createIndex(Person.class);\r\n        elasticsearchTemplate.putMapping(Person.class);\r\n        elasticsearchTemplate.refresh(Person.class, true);\r\n\t\telasticsearchTemplate.deleteIndex(PersonMultipleLevelNested.class);\r\n\t\telasticsearchTemplate.createIndex(PersonMultipleLevelNested.class);\r\n\t\telasticsearchTemplate.putMapping(PersonMultipleLevelNested.class);\r\n\t\telasticsearchTemplate.refresh(PersonMultipleLevelNested.class, true);\r\n    }\r\n\r\n    @Test\r\n    public void shouldIndexInnerObject() {\r\n        // given\r\n        String id = randomAlphanumeric(5);\r\n        Book book = new Book();\r\n        book.setId(id);\r\n        book.setName(\"xyz\");\r\n        book.setVersion(System.nanoTime());\r\n        Author author = new Author();\r\n        author.setId(\"1\");\r\n        author.setName(\"ABC\");\r\n        // when\r\n        bookRepository.save(book);\r\n        // then\r\n        assertThat(bookRepository.findOne(id), is(notNullValue()));\r\n    }\r\n\r\n    @Test\r\n    public void shouldIndexInitialLevelNestedObject(){\r\n\r\n        List<Car> cars = new ArrayList<Car>();\r\n\r\n        Car saturn = new Car();\r\n        saturn.setName(\"Saturn\");\r\n        saturn.setModel(\"SL\");\r\n\r\n        Car subaru = new Car();\r\n        subaru.setName(\"Subaru\");\r\n        subaru.setModel(\"Imprezza\");\r\n\r\n        Car ford = new Car();\r\n        ford.setName(\"Ford\");\r\n        ford.setModel(\"Focus\");\r\n\r\n        cars.add(saturn);\r\n        cars.add(subaru);\r\n        cars.add(ford);\r\n\r\n        Person foo = new Person();\r\n        foo.setName(\"Foo\");\r\n        foo.setId(\"1\");\r\n        foo.setCar(cars);\r\n\r\n\r\n        Car car  = new Car();\r\n        car.setName(\"Saturn\");\r\n        car.setModel(\"Imprezza\");\r\n\r\n        Person bar = new Person();\r\n        bar.setId(\"2\");\r\n        bar.setName(\"Bar\");\r\n        bar.setCar(Arrays.asList(car));\r\n\r\n        List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();\r\n        IndexQuery indexQuery1 = new IndexQuery();\r\n        indexQuery1.setId(foo.getId());\r\n        indexQuery1.setObject(foo);\r\n\r\n        IndexQuery indexQuery2 = new IndexQuery();\r\n        indexQuery2.setId(bar.getId());\r\n        indexQuery2.setObject(bar);\r\n\r\n        indexQueries.add(indexQuery1);\r\n        indexQueries.add(indexQuery2);\r\n\r\n        elasticsearchTemplate.putMapping(Person.class);\r\n        elasticsearchTemplate.bulkIndex(indexQueries);\r\n        elasticsearchTemplate.refresh(Person.class, true);\r\n\r\n        QueryBuilder builder = nestedQuery(\"car\", boolQuery().must(termQuery(\"car.name\", \"saturn\")).must(termQuery(\"car.model\", \"imprezza\")));\r\n\r\n        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();\r\n        List<Person> persons = elasticsearchTemplate.queryForList(searchQuery, Person.class);\r\n\r\n        assertThat(persons.size() , is(1));\r\n\r\n    }\r\n\r\n\t@Test\r\n\tpublic void shouldIndexMultipleLevelNestedObject() {\r\n\t\t//given\r\n\t\tList<IndexQuery> indexQueries = createPerson();\r\n\r\n\t\t//when\r\n\t\telasticsearchTemplate.putMapping(PersonMultipleLevelNested.class);\r\n\t\telasticsearchTemplate.bulkIndex(indexQueries);\r\n\t\telasticsearchTemplate.refresh(PersonMultipleLevelNested.class, true);\r\n\r\n\t\t//then\r\n\t\tGetQuery getQuery = new GetQuery();\r\n\t\tgetQuery.setId(\"1\");\r\n\t\tPersonMultipleLevelNested personIndexed = elasticsearchTemplate.queryForObject(getQuery, PersonMultipleLevelNested.class);\r\n\t\tassertThat(personIndexed, is(notNullValue()));\r\n\t}\r\n\r\n\t@Test\r\n\tpublic void shouldSearchUsingNestedQueryOnMultipleLevelNestedObject() {\r\n\t\t//given\r\n\t\tList<IndexQuery> indexQueries = createPerson();\r\n\r\n\t\t//when\r\n\t\telasticsearchTemplate.putMapping(PersonMultipleLevelNested.class);\r\n\t\telasticsearchTemplate.bulkIndex(indexQueries);\r\n\t\telasticsearchTemplate.refresh(PersonMultipleLevelNested.class, true);\r\n\r\n\t\t//then\r\n\t\tBoolQueryBuilder builder = boolQuery();\r\n\t\tbuilder.must(nestedQuery(\"girlFriends\", termQuery(\"girlFriends.type\", \"temp\")))\r\n\t\t\t\t.must(nestedQuery(\"girlFriends.cars\", termQuery(\"girlFriends.cars.name\", \"Ford\".toLowerCase())));\r\n\r\n\t\tSearchQuery searchQuery = new NativeSearchQueryBuilder()\r\n\t\t\t\t.withQuery(builder)\r\n\t\t\t\t.build();\r\n\r\n\t\tPage<PersonMultipleLevelNested> personIndexed = elasticsearchTemplate.queryForPage(searchQuery, PersonMultipleLevelNested.class);\r\n\t\tassertThat(personIndexed, is(notNullValue()));\r\n\t \tassertThat(personIndexed.getTotalElements(), is(1L));\r\n\t\tassertThat(personIndexed.getContent().get(0).getId(), is(\"1\"));\r\n\t}\r\n\r\n\r\n\r\n\tprivate List<IndexQuery> createPerson() {\r\n\r\n\t\tPersonMultipleLevelNested person1 = new PersonMultipleLevelNested();\r\n\r\n\t\tperson1.setId(\"1\");\r\n\t\tperson1.setName(\"name\");\r\n\r\n\t\tCar saturn = new Car();\r\n\t\tsaturn.setName(\"Saturn\");\r\n\t\tsaturn.setModel(\"SL\");\r\n\r\n\t\tCar subaru = new Car();\r\n\t\tsubaru.setName(\"Subaru\");\r\n\t\tsubaru.setModel(\"Imprezza\");\r\n\r\n\t\tCar car = new Car();\r\n\t\tcar.setName(\"Saturn\");\r\n\t\tcar.setModel(\"Imprezza\");\r\n\r\n\t\tCar ford = new Car();\r\n\t\tford.setName(\"Ford\");\r\n\t\tford.setModel(\"Focus\");\r\n\r\n\t\tGirlFriend permanent = new GirlFriend();\r\n\t\tpermanent.setName(\"permanent\");\r\n\t\tpermanent.setType(\"permanent\");\r\n\t\tpermanent.setCars(Arrays.asList(saturn, subaru));\r\n\r\n\t\tGirlFriend temp = new GirlFriend();\r\n\t\ttemp.setName(\"temp\");\r\n\t\ttemp.setType(\"temp\");\r\n\t\ttemp.setCars(Arrays.asList(car, ford));\r\n\r\n\t\tperson1.setGirlFriends(Arrays.asList(permanent, temp));\r\n\r\n\t\tIndexQuery indexQuery1 = new IndexQuery();\r\n\t\tindexQuery1.setId(person1.getId());\r\n\t\tindexQuery1.setObject(person1);\r\n\r\n\t\tPersonMultipleLevelNested person2 = new PersonMultipleLevelNested();\r\n\r\n\t\tperson2.setId(\"2\");\r\n\t\tperson2.setName(\"name\");\r\n\r\n\t\tperson2.setGirlFriends(Arrays.asList(permanent));\r\n\r\n\t\tIndexQuery indexQuery2 = new IndexQuery();\r\n\t\tindexQuery2.setId(person2.getId());\r\n\t\tindexQuery2.setObject(person2);\r\n\r\n\t\tList<IndexQuery> indexQueries = new ArrayList<IndexQuery>();\r\n\t\tindexQueries.add(indexQuery1);\r\n\t\tindexQueries.add(indexQuery2);\r\n\r\n\t\treturn indexQueries;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/test/java/org/springframework/data/elasticsearch/repositories/OperationDocumentRepositoryTest.java",
    "content": "package org.springframework.data.elasticsearch.repositories;\n\nimport java.util.Map;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.elasticsearch.core.ElasticsearchTemplate;\nimport org.springframework.data.elasticsearch.entities.OperationDocument;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(\"classpath:/spring-context.xml\")\npublic class OperationDocumentRepositoryTest {\n\n\t@Autowired\n\tprivate ElasticsearchTemplate elasticsearchTemplate;\n\n\t@Autowired\n\tprivate OperationDocumentRepository repository;\n\n\t@Test\n\tpublic void test() {\n\t\tMap mapping = elasticsearchTemplate.getMapping(OperationDocument.class);\n\t\tSystem.out.println(mapping.toString());\n\t}\n\n\n}"
  },
  {
    "path": "src/test/java/org/springframework/data/elasticsearch/repositories/SampleArticleRepositoryTest.java",
    "content": "package org.springframework.data.elasticsearch.repositories;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.data.elasticsearch.entities.Article;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\nimport javax.annotation.Resource;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport static org.hamcrest.CoreMatchers.is;\nimport static org.hamcrest.CoreMatchers.notNullValue;\nimport static org.junit.Assert.assertThat;\n\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(\"classpath:/springContext-test.xml\")\npublic class SampleArticleRepositoryTest {\n\n    @Resource\n    private SampleArticleRepository sampleArticleRepository;\n\n    @Before\n    public void emptyData(){\n        sampleArticleRepository.deleteAll();\n    }\n\n    @Test\n    public void shouldIndexSingleBookEntity(){\n\n        Article article = new Article();\n        article.setId(\"123455\");\n        article.setTitle(\"Spring Data Elasticsearch Test Article\");\n        List<String> authors = new ArrayList<String>();\n        authors.add(\"Author1\");\n        authors.add(\"Author2\");\n        article.setAuthors(authors);\n        List<String> tags = new ArrayList<String>();\n        tags.add(\"tag1\");\n        tags.add(\"tag2\");\n        tags.add(\"tag3\");\n        article.setTags(tags);\n        //Indexing using sampleArticleRepository\n        sampleArticleRepository.save(article);\n        //lets try to search same record in elasticsearch\n        Article indexedArticle = sampleArticleRepository.findOne(article.getId());\n        assertThat(indexedArticle,is(notNullValue()));\n        assertThat(indexedArticle.getId(),is(article.getId()));\n        assertThat(indexedArticle.getAuthors().size(),is(authors.size()));\n        assertThat(indexedArticle.getTags().size(),is(tags.size()));\n    }\n}\n"
  },
  {
    "path": "src/test/java/org/springframework/data/elasticsearch/repositories/SampleBookRepositoryTest.java",
    "content": "package org.springframework.data.elasticsearch.repositories;\r\n\r\nimport org.apache.commons.lang.RandomStringUtils;\r\nimport org.junit.Before;\r\nimport org.junit.Ignore;\r\nimport org.junit.Test;\r\nimport org.junit.runner.RunWith;\r\nimport org.springframework.data.domain.Page;\r\nimport org.springframework.data.domain.PageRequest;\r\nimport org.springframework.data.domain.Sort;\r\nimport org.springframework.data.elasticsearch.core.ElasticsearchTemplate;\r\nimport org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;\r\nimport org.springframework.data.elasticsearch.core.query.SearchQuery;\r\nimport org.springframework.data.elasticsearch.entities.Book;\r\nimport org.springframework.data.elasticsearch.repositories.book.SampleBookRepository;\r\nimport org.springframework.test.context.ContextConfiguration;\r\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r\n\r\nimport javax.annotation.Resource;\r\nimport java.util.*;\r\n\r\nimport static java.util.Arrays.asList;\r\nimport static org.elasticsearch.index.query.FilterBuilders.*;\r\nimport static org.elasticsearch.index.query.QueryBuilders.*;\r\nimport static org.hamcrest.CoreMatchers.*;\r\nimport static org.junit.Assert.assertThat;\r\n\r\n\r\n@RunWith(SpringJUnit4ClassRunner.class)\r\n@ContextConfiguration(\"classpath:/springContext-book-test.xml\")\r\npublic class SampleBookRepositoryTest {\r\n\r\n    @Resource\r\n    private SampleBookRepository repository;\r\n\r\n    @Resource\r\n\tprivate ElasticsearchTemplate template;\r\n\r\n\t@Before\r\n    public void emptyData(){\r\n        repository.deleteAll();\r\n    }\r\n\r\n    @Test\r\n    public void shouldIndexSingleBookEntity(){\r\n\r\n        Book book = new Book();\r\n        book.setId(\"123455\");\r\n        book.setName(\"Spring Data Elasticsearch\");\r\n        book.setVersion(System.currentTimeMillis());\r\n        repository.save(book);\r\n        //lets try to search same record in elasticsearch\r\n        Book indexedBook = repository.findOne(book.getId());\r\n        assertThat(indexedBook,is(notNullValue()));\r\n        assertThat(indexedBook.getId(),is(book.getId()));\r\n    }\r\n\r\n    @Test\r\n    public void shouldBulkIndexMultipleBookEntities(){\r\n\r\n        Book book1 = new Book(RandomStringUtils.random(5),\"Spring Data\",System.currentTimeMillis());\r\n        Book book2 = new Book(RandomStringUtils.random(5),\"Spring Data Elasticsearch\",System.currentTimeMillis());\r\n        //Bulk Index using repository\r\n        repository.save(asList(book1, book2));\r\n        //lets try to search same records in elasticsearch\r\n        Book indexedBook1 = repository.findOne(book1.getId());\r\n        assertThat(indexedBook1.getId(), is(book1.getId()));\r\n        Book indexedBook2 = repository.findOne(book2.getId());\r\n        assertThat(indexedBook2.getId(),is(book2.getId()));\r\n    }\r\n\r\n    @Test\r\n    @Ignore(\"not to run as just for showing usage of repository ! might throw java.lang.OutOfMemoryError :-) \")\r\n    public void crudRepositoryTest(){\r\n\r\n        Book book1 = new Book(RandomStringUtils.random(5),\"Spring Data\",System.currentTimeMillis());\r\n        Book book2 = new Book(RandomStringUtils.random(5),\"Spring Data Elasticsearch\",System.currentTimeMillis());\r\n        List<Book> books = Arrays.asList(book1,book2);\r\n\r\n        //indexing single document\r\n        repository.save(book1);\r\n        //bulk indexing multiple documents\r\n        repository.save(books);\r\n        //searching single document based on documentId\r\n        Book book = repository.findOne(book1.getId());\r\n        //to get all records as iteratable collection\r\n        Iterable<Book> bookList = repository.findAll();\r\n        //page request which will give first 10 document\r\n        Page<Book> bookPage = repository.findAll(new PageRequest(0,10));\r\n        // to get all records as ASC on name field\r\n        Iterable<Book> bookIterable = repository.findAll(new Sort(new Sort.Order(Sort.Direction.ASC,\"name\")));\r\n        //to get total number of docoments in an index\r\n        Long count = repository.count();\r\n        //to check wheather document exists or not\r\n        boolean exists = repository.exists(book1.getId());\r\n        //delete a document by entity\r\n        repository.delete(book1);\r\n        //delete multiple document using collection\r\n        repository.delete(books);\r\n        //delete a document using documentId\r\n        repository.delete(book1.getId());\r\n        //delete all document\r\n        repository.deleteAll();\r\n    }\r\n\r\n    @Test\r\n    public void shouldCountAllElementsInIndex(){\r\n\r\n        List<Book> books = new ArrayList<Book>();\r\n        for(int i=1; i<=10 ; i++){\r\n           books.add(new Book(RandomStringUtils.random(5),\"Spring Data Rocks !\",System.currentTimeMillis()));\r\n\r\n        }\r\n        //Bulk Index using repository\r\n        repository.save(books);\r\n        //count all elements\r\n        long count = repository.count();\r\n        assertThat(count,is(equalTo(10L)));\r\n    }\r\n\r\n    @Test\r\n    public void shouldExecuteCustomSearchQueries(){\r\n\r\n        Book book1 = new Book(RandomStringUtils.random(5),\"Custom Query\",System.currentTimeMillis());\r\n        Book book2 = new Book(RandomStringUtils.random(5),null,System.currentTimeMillis());\r\n        //indexing a book\r\n        repository.save(Arrays.asList(book1, book2));\r\n\r\n        SearchQuery searchQuery = new NativeSearchQueryBuilder()\r\n                .withQuery(matchAllQuery())\r\n                .withFilter(boolFilter().must(existsFilter(\"name\")))\r\n                .withPageable(new PageRequest(0,10))\r\n                .build();\r\n\r\n        Page<Book> books = repository.search(searchQuery);\r\n        assertThat(books.getNumberOfElements(), is(equalTo(1)));\r\n    }\r\n\r\n    /*@Test\r\n    public void shouldExecuteCustomSearchQuery(){\r\n        Book book1 = new Book(RandomStringUtils.random(5),\"Custom Query\",System.currentTimeMillis());\r\n        Book book2 = new Book(RandomStringUtils.random(5),\"Elasticsearch QueryBuilder\",System.currentTimeMillis());\r\n        //bulk indexing two documents\r\n        repository.save(Arrays.asList(book1, book2));\r\n        QueryBuilder queryBuilder = QueryBuilders.fieldQuery(\"name\",book1.getName());\r\n        //searching in elasticsearch using repository Page<E> search(QueryBuilder q, PageRequest p ) method.\r\n        Page<Book> books =  repository.search(queryBuilder,new PageRequest(0,20));\r\n        assertThat(books.getNumberOfElements(),is(equalTo(1)));\r\n    }*/\r\n\r\n    @Test\r\n    public void shouldReturnBooksForCustomMethodsWithAndCriteria(){\r\n        Book book1 = new Book(RandomStringUtils.random(5),\"test\",System.currentTimeMillis());\r\n        Book book2 = new Book(RandomStringUtils.random(5),\"test\",System.currentTimeMillis());\r\n        book1.setPrice(10L);\r\n        book2.setPrice(10L);\r\n        repository.save(Arrays.asList(book1, book2));\r\n\r\n        Page<Book> books = repository.findByNameAndPrice(\"test\", 10, new PageRequest(0, 10));\r\n        assertThat(books.getContent().size(), is(2));\r\n    }\r\n\r\n    @Test\r\n    public void shouldReturnBooksWithName(){\r\n        Book book1 = new Book(RandomStringUtils.random(5),\"test1\",System.currentTimeMillis());\r\n        Book book2 = new Book(RandomStringUtils.random(5),\"test2\",System.currentTimeMillis());\r\n        repository.save(Arrays.asList(book1, book2));\r\n\r\n        Page<Book> books = repository.findByName(\"test1\", new PageRequest(0, 10));\r\n        assertThat(books.getContent().size(), is(1));\r\n    }\r\n\r\n\t@Test\r\n\tpublic void shouldReturnBooksForGivenBucket(){\r\n\t\tBook book1 = new Book(RandomStringUtils.random(5),\"test1\",System.currentTimeMillis());\r\n\t\tBook book2 = new Book(RandomStringUtils.random(5),\"test2\",System.currentTimeMillis());\r\n\r\n\t\tMap<Integer, Collection<String>> map1 = new HashMap<Integer, Collection<String>>();\r\n\t\tmap1.put(1, Arrays.asList(\"test1\", \"test2\"));\r\n\r\n\t\tMap<Integer, Collection<String>> map2 = new HashMap<Integer, Collection<String>>();\r\n\t\tmap2.put(1, Arrays.asList(\"test3\", \"test4\"));\r\n\r\n\t\tbook1.setBuckets(map1);\r\n\t\tbook2.setBuckets(map2);\r\n\r\n\t\trepository.save(Arrays.asList(book1,book2));\r\n\r\n\t\tSearchQuery searchQuery = new NativeSearchQueryBuilder()\r\n\t\t\t\t.withQuery(nestedQuery(\"buckets\", termQuery(\"buckets.1\", \"test3\")))\r\n\t\t\t\t.build();\r\n\r\n\t\tPage<Book> books = repository.search(searchQuery);\r\n\r\n\t\tassertThat(books.getContent().size(), is(1));\r\n\t}\r\n\r\n\r\n\t@Test\r\n\tpublic void shouldReturnBooksForGivenBucketUsingTemplate(){\r\n\r\n\t\ttemplate.deleteIndex(Book.class);\r\n\t\ttemplate.createIndex(Book.class);\r\n\t\ttemplate.putMapping(Book.class);\r\n\t\ttemplate.refresh(Book.class, true);\r\n\r\n\t\tBook book1 = new Book(RandomStringUtils.random(5),\"test1\",System.currentTimeMillis());\r\n\t\tBook book2 = new Book(RandomStringUtils.random(5),\"test2\",System.currentTimeMillis());\r\n\r\n\t\tMap<Integer, Collection<String>> map1 = new HashMap<Integer, Collection<String>>();\r\n\t\tmap1.put(1, Arrays.asList(\"test1\", \"test2\"));\r\n\r\n\t\tMap<Integer, Collection<String>> map2 = new HashMap<Integer, Collection<String>>();\r\n\t\tmap2.put(1, Arrays.asList(\"test3\", \"test4\"));\r\n\r\n\t\tbook1.setBuckets(map1);\r\n\t\tbook2.setBuckets(map2);\r\n\r\n\t\trepository.save(Arrays.asList(book1,book2));\r\n\r\n\t\tSearchQuery searchQuery = new NativeSearchQueryBuilder()\r\n\t\t\t\t.withQuery(nestedQuery(\"buckets\", termQuery(\"buckets.1\", \"test3\")))\r\n\t\t\t\t.build();\r\n\r\n\t\tPage<Book> books = repository.search(searchQuery);\r\n\r\n\t\tassertThat(books.getContent().size(), is(1));\r\n\t}\r\n\r\n\t//    //todo\r\n    @Ignore\r\n    @Test\r\n    public void shouldReturnBooksForCustomMethodsWithOrCriteria(){\r\n        Book book1 = new Book(RandomStringUtils.random(5),\"test Or\",System.currentTimeMillis());\r\n        Book book2 = new Book(RandomStringUtils.random(5),\"test And\",System.currentTimeMillis());\r\n        book1.setPrice(10L);\r\n        book2.setPrice(10L);\r\n        repository.save(Arrays.asList(book1, book2));\r\n\r\n        Page<Book> books = repository.findByNameOrPrice(\"message\", 10, new PageRequest(0, 10));\r\n        assertThat(books.getContent().size(), is(2));\r\n    }\r\n\r\n    @Test\r\n    public void shouldGiveIterableOfBooks() {\r\n        Book book1 = new Book(RandomStringUtils.random(5),\"test Or\",System.currentTimeMillis());\r\n        Book book2 = new Book(RandomStringUtils.random(5),\"test And\",System.currentTimeMillis());\r\n        book1.setPrice(10L);\r\n        book2.setPrice(10L);\r\n        repository.save(Arrays.asList(book1, book2));\r\n\r\n        Iterable<Book> books = repository.search(matchAllQuery());\r\n        assertThat(books, is(notNullValue()));\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "src/test/java/org/springframework/data/elasticsearch/repositories/SampleProductRepositoryTest.java",
    "content": "package org.springframework.data.elasticsearch.repositories;\r\n\r\nimport org.junit.Before;\r\nimport org.junit.Test;\r\nimport org.junit.runner.RunWith;\r\nimport org.springframework.data.domain.PageRequest;\r\nimport org.springframework.data.elasticsearch.entities.Product;\r\nimport org.springframework.test.context.ContextConfiguration;\r\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r\n\r\nimport javax.annotation.Resource;\r\nimport java.util.List;\r\n\r\nimport static org.hamcrest.CoreMatchers.is;\r\nimport static org.junit.Assert.assertThat;\r\n\r\n@RunWith(SpringJUnit4ClassRunner.class)\r\n@ContextConfiguration(\"classpath:/springContext-test.xml\")\r\npublic class SampleProductRepositoryTest {\r\n\r\n    @Resource\r\n    private SampleProductRepository sampleProductRepository;\r\n\r\n    @Before\r\n    public void emptyData(){\r\n        sampleProductRepository.deleteAll();\r\n    }\r\n\r\n    @Test\r\n    public void shouldReturnListOfProductsByName() {\r\n        //given\r\n        sampleProductRepository.index(new Product(\"1\", \"test product 1\",\r\n                \"How great would it be if we could search for this product.\",\r\n                true));\r\n        sampleProductRepository\r\n                .index(new Product(\r\n                        \"2\",\r\n                        \"test Product 2\",\r\n                        \"How great would it be if we could search for this other product.\",\r\n                        true));\r\n        //when\r\n        List<Product> products = sampleProductRepository.findByName(\"product\");\r\n        //then\r\n        assertThat(products.size(), is(2));\r\n    }\r\n\r\n    @Test\r\n    public void shouldReturnListOfBookByNameWithPageable(){\r\n        //given\r\n        sampleProductRepository.index(new Product(\"1\", \"test product 1\",\r\n                \"How great would it be if we could search for this product.\",\r\n                true));\r\n        sampleProductRepository\r\n                .index(new Product(\r\n                        \"2\",\r\n                        \"test product 2\",\r\n                        \"How great would it be if we could search for this other product.\",\r\n                        true));\r\n        //when\r\n        List<Product> products = sampleProductRepository.findByName(\"product\", new PageRequest(0,1));\r\n        //then\r\n        assertThat(products.size(), is(1));\r\n    }\r\n\r\n    @Test\r\n    public void shouldReturnListOfProductsForGivenNameAndId(){\r\n        //given\r\n        sampleProductRepository.save(new Product(\"1\", \"test product 1\",\r\n                \"How great would it be if we could search for this product.\",\r\n                true));\r\n        sampleProductRepository\r\n                .save(new Product(\r\n                        \"2\",\r\n                        \"test product 2\",\r\n                        \"How great would it be if we could search for this other product.\",\r\n                        true));\r\n        List<Product> products = sampleProductRepository.findByNameAndId(\"product\",\"1\");\r\n\r\n        //then\r\n        assertThat(products.size(),is(1));\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/test/resources/contact-test.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xmlns:elasticsearch=\"http://www.springframework.org/schema/data/elasticsearch\"\n       xsi:schemaLocation=\"http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd\n\t\thttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd\">\n\n    <elasticsearch:node-client id=\"client\" local=\"true\"/>\n\n    <!--<elasticsearch:transport-client id=\"client\" cluster-name=\"elasticsearch\" cluster-nodes=\"127.0.0.1:9300\"/>-->\n\n    <bean name=\"elasticsearchTemplate\" class=\"org.springframework.data.elasticsearch.core.ElasticsearchTemplate\">\n        <constructor-arg name=\"client\" ref=\"client\"/>\n    </bean>\n\n\n    <elasticsearch:repositories base-package=\"org.springframework.data.elasticsearch.repositories.book\" />\n\n</beans>\n"
  },
  {
    "path": "src/test/resources/spring-context.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n       xmlns:elasticsearch=\"http://www.springframework.org/schema/data/elasticsearch\"\n       xsi:schemaLocation=\"http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd\n\t\thttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd\">\n\n    <elasticsearch:transport-client id=\"client\" cluster-name=\"elasticsearch\" cluster-nodes=\"127.0.0.1:9301\" />\n\n    <!--<elasticsearch:transport-client id=\"client\" cluster-name=\"elasticsearch\" cluster-nodes=\"127.0.0.1:9300\"/>-->\n    <bean name=\"elasticsearchTemplate\" class=\"org.springframework.data.elasticsearch.core.ElasticsearchTemplate\">\n        <constructor-arg name=\"client\" ref=\"client\"/>\n    </bean>\n\n\n    <elasticsearch:repositories base-package=\"org.springframework.data.elasticsearch.repositories\" />\n\n</beans>"
  },
  {
    "path": "src/test/resources/springContext-book-test.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n       xmlns:elasticsearch=\"http://www.springframework.org/schema/data/elasticsearch\"\r\n       xsi:schemaLocation=\"http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd\r\n\t\thttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd\">\r\n\r\n    <elasticsearch:node-client id=\"client\" local=\"true\"/>\r\n\r\n    <!--<elasticsearch:transport-client id=\"client\" cluster-name=\"elasticsearch\" cluster-nodes=\"127.0.0.1:9300\"/>-->\r\n\r\n    <bean name=\"elasticsearchTemplate\" class=\"org.springframework.data.elasticsearch.core.ElasticsearchTemplate\">\r\n        <constructor-arg name=\"client\" ref=\"client\"/>\r\n    </bean>\r\n\r\n\r\n    <elasticsearch:repositories base-package=\"org.springframework.data.elasticsearch.repositories.book\" />\r\n\r\n\r\n</beans>"
  },
  {
    "path": "src/test/resources/springContext-test.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n       xmlns:elasticsearch=\"http://www.springframework.org/schema/data/elasticsearch\"\r\n       xsi:schemaLocation=\"http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd\r\n\t\thttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd\">\r\n\r\n    <elasticsearch:node-client id=\"client\" local=\"true\"/>\r\n\r\n    <!--<elasticsearch:transport-client id=\"client\" cluster-name=\"elasticsearch\" cluster-nodes=\"127.0.0.1:9300\"/>-->\r\n    <bean name=\"elasticsearchTemplate\" class=\"org.springframework.data.elasticsearch.core.ElasticsearchTemplate\">\r\n        <constructor-arg name=\"client\" ref=\"client\"/>\r\n    </bean>\r\n\r\n\r\n    <elasticsearch:repositories base-package=\"org.springframework.data.elasticsearch.repositories\" />\r\n\r\n\r\n</beans>"
  }
]