Example usage for org.springframework.data.elasticsearch.core.facet.request TermFacetRequestBuilder TermFacetRequestBuilder

List of usage examples for org.springframework.data.elasticsearch.core.facet.request TermFacetRequestBuilder TermFacetRequestBuilder

Introduction

In this page you can find the example usage for org.springframework.data.elasticsearch.core.facet.request TermFacetRequestBuilder TermFacetRequestBuilder.

Prototype

public TermFacetRequestBuilder(String name) 

Source Link

Usage

From source file:example.springdata.elasticsearch.ElasticsearchOperationsTest.java

@Test
public void termFacet() {

    String termField = "keywords";
    String facetName = "all-keywords";

    FacetedPage<Conference> firstPage = operations.queryForPage(//
            new NativeSearchQueryBuilder().//
                    withQuery(matchAllQuery()).//
                    withFacet(new TermFacetRequestBuilder(facetName).//
                            allTerms().//
                            descCount().//
                            fields(termField).build())
                    .//
                    build(),//from  www .  ja  v  a  2s.  c  o  m
            Conference.class);

    TermResult facet = (TermResult) firstPage.getFacet(facetName);

    assertThat(facet.getTerms(), hasSize(8));

    facet.getTerms().forEach(term -> {
        assertThat(term.getTerm(),
                isOneOf("java", "spring", "scala", "play", "elasticsearch", "kibana", "cloud", "aws"));
    });
}

From source file:com.company.project.data.elasticsearch.service.UserESServiceTest.java

public void testRepositoryQueries() {
    System.out.println("testRepository");

    //elasticsearchTemplate.deleteIndex("xuseridx");
    elasticsearchTemplate.deleteIndex(User.class);
    elasticsearchTemplate.createIndex(User.class);
    //elasticsearchTemplate.createIndex(User.class, user);
    //elasticsearchTemplate.createIndex("xuseridx");

    elasticsearchTemplate.putMapping(User.class);
    elasticsearchTemplate.refresh(User.class, true);

    String id = UUID.randomUUID().toString();
    User user = new User();
    user.setId(id);/*from  w ww . j  a va 2  s . c om*/
    user.setName("user-" + id);
    user.setRole(1l);
    user.setPath("1.0");
    Map<Integer, Collection<String>> userFilter = new HashMap<>();
    userFilter.put(1, Arrays.asList("filter1", "filter2"));
    userFilter.put(2, Arrays.asList("filter11", "filter12"));
    user.setFilter(userFilter);
    userRepository.save(user);

    boolean exists = userRepository.exists(user.getId());
    assertTrue(exists);

    List<User> users = new ArrayList<>();
    id = UUID.randomUUID().toString();
    user = new User();
    user.setId(id);
    user.setName("user-" + id);
    user.setRole(2l);
    user.setPath("1.1.0");
    userFilter = new HashMap<>();
    userFilter.put(1, Arrays.asList("filter1", "filter3"));
    userFilter.put(2, Arrays.asList("filter11", "filter13"));
    user.setFilter(userFilter);
    users.add(user);
    //userRepository.save(user);
    id = UUID.randomUUID().toString();
    user = new User();
    user.setId(id);
    user.setName("user-" + id);
    user.setRole(3l);
    user.setPath("1.1.1.0");
    userFilter = new HashMap<>();
    userFilter.put(1, Arrays.asList("filter1", "filter4"));
    userFilter.put(2, Arrays.asList("filter11", "filter14"));
    user.setFilter(userFilter);
    users.add(user);
    //userRepository.save(user);
    userRepository.save(users); //bulk save
    exists = userRepository.exists(user.getId());
    assertTrue(exists);

    elasticsearchTemplate.refresh(User.class, true);

    GetQuery getQuery = new GetQuery();
    getQuery.setId(id);
    User userIndexed = elasticsearchTemplate.queryForObject(getQuery, User.class);
    assertEquals("user-" + id, "" + userIndexed.getName());
    assertEquals(id, "" + userIndexed.getId());
    assertEquals("3", "" + userIndexed.getRole());

    String facetName = "testName";
    SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
            .withFacet(new TermFacetRequestBuilder(facetName).fields("role").descCount().build()).build();

    // when
    FacetedPage<User> result = elasticsearchTemplate.queryForPage(searchQuery, User.class);
    assertEquals(3, result.getNumberOfElements());
    TermResult facet = (TermResult) result.getFacet(facetName);
    assertEquals(3, facet.getTerms().size());
    for (Term term : facet.getTerms()) {
        assertTrue("1".equals(term.getTerm()) || "2".equals(term.getTerm()) || "3".equals(term.getTerm()));
        System.out.println("Facet term : " + term.getTerm());
        //System.out.println("Facet count : " + term.getCount());
        //result
        //Facet term : 3
        //Facet term : 2
        //Facet term : 1
    }

    // query list all
    searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
            //.withFacet(new TermFacetRequestBuilder(facetName).fields("role").descCount().build())
            .build();
    List<User> userList = elasticsearchTemplate.queryForList(searchQuery, User.class);
    assertEquals(3, userList.size());
    for (User u : userList) {
        System.out.println("User ID: " + u.getId());
        System.out.println("User Name: " + u.getName());
    }

    // query list all with pagination
    searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withPageable(new PageRequest(0, 10))
            //.withIndices("xuseridx")
            //.withTypes("xusertype")
            //.withFacet(new TermFacetRequestBuilder(facetName).fields("role").descCount().build())
            .build();
    Page<User> pagedUsers = elasticsearchTemplate.queryForPage(searchQuery, User.class);
    assertEquals(3, pagedUsers.getTotalElements());
    assertEquals(1, pagedUsers.getTotalPages());
    for (User u : pagedUsers.getContent()) {
        System.out.println("User ID: " + u.getId());
        System.out.println("User Name: " + u.getName());
    }

    // query filter with key "1" contains value "filter3" and key "2" contains value "filter13"
    QueryBuilder builder = nestedQuery("filter",
            boolQuery().must(termQuery("1", "filter3")).must(termQuery("2", "filter13")));
    searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
    userList = elasticsearchTemplate.queryForList(searchQuery, User.class);
    assertEquals(1, userList.size());
    for (User u : userList) {
        System.out.println("User ID: " + u.getId());
        System.out.println("User Name: " + u.getName());
    }

    // query all with filter path prefix "1.1"
    builder = boolQuery().must(prefixQuery("path", "1.1"));
    searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
    userList = elasticsearchTemplate.queryForList(searchQuery, User.class);
    assertEquals(2, userList.size());
    for (User u : userList) {
        System.out.println("User ID: " + u.getId());
        System.out.println("User Name: " + u.getName());
    }

    builder = QueryBuilders.multiMatchQuery("user", // term to search
            "path", "name" // field to search
    );
    searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
    userList = elasticsearchTemplate.queryForList(searchQuery, User.class);
    assertEquals(3, userList.size());
    for (User u : userList) {
        System.out.println("User ID: " + u.getId());
        System.out.println("User Name: " + u.getName());
    }

    // ref: https://github.com/elasticsearch/elasticsearch/blob/master/docs/java-api/query-dsl-queries.asciidoc#boolean-query
    // http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/query-dsl-queries.html
    // Boolean Query
    builder = boolQuery().must(termQuery("content", "test1")) // field name, keyword
            .must(termQuery("content", "test4")) // field name, keyword
            .mustNot(termQuery("content", "test2")) // field name, keyword
            .should(termQuery("content", "test3")); // field name, keyword
    // Boosting Query
    builder = QueryBuilders.boostingQuery().positive(termQuery("name", "kimchy")) // query that will promote documents
            .negative(termQuery("name", "dadoonet")) // query that will demote documents
            .negativeBoost(0.2f); // negative boost
    //IDs Query
    builder = QueryBuilders.idsQuery().ids("1", "2");
    // Constant Score Query
    builder = QueryBuilders.constantScoreQuery(termFilter("name", "kimchy") // you can use a filter
    ).boost(2.0f); // filter score
    builder = QueryBuilders.constantScoreQuery(termQuery("name", "kimchy") // you can use a query
    ).boost(2.0f);
    // Prefix Query
    builder = QueryBuilders.prefixQuery("brand", // field
            "heine" // term
    );
    // QueryString Query
    builder = QueryBuilders.queryString("+kimchy -elasticsearch");
    // Range Query
    builder = QueryBuilders.rangeQuery("price") // field
            .from(5) // from
            .to(10) // to
            .includeLower(true) // include lower value means that from is gt when false or gte when true
            .includeUpper(false); // include upper value means that to is lt when false or lte when true

    builder = QueryBuilders.disMaxQuery() // add your queries
            .add(termQuery("name", "kimchy")) // add your queries
            .add(termQuery("name", "elasticsearch")) // 
            .boost(1.2f) // boost factor
            .tieBreaker(0.7f); // tie breaker
    // Fuzzy Like This (Field) Query (flt and flt_field)
    builder = QueryBuilders.fuzzyLikeThisQuery("name.first", "name.last") // fields
            .likeText("text like this one") // text
            .maxQueryTerms(12); // max num of Terms in generated queries
    //FuzzyQuery
    builder = QueryBuilders.fuzzyQuery("name", // field
            "kimzhy" // term
    );
}