Example usage for org.springframework.data.elasticsearch.core.query NativeSearchQuery NativeSearchQuery

List of usage examples for org.springframework.data.elasticsearch.core.query NativeSearchQuery NativeSearchQuery

Introduction

In this page you can find the example usage for org.springframework.data.elasticsearch.core.query NativeSearchQuery NativeSearchQuery.

Prototype

public NativeSearchQuery(QueryBuilder query) 

Source Link

Usage

From source file:com.github.lothar.security.acl.elasticsearch.repository.AclElasticsearchRepository.java

@Override
public Page<T> search(SearchQuery query) {
    Assert.isInstanceOf(NativeSearchQuery.class, query, "NativeSearchQuery only are supported :(");
    NativeSearchQuery searchQuery = new NativeSearchQuery(and(query.getQuery(), aclFilter()));
    BeanUtils.copyProperties(query, searchQuery, "query");
    return elasticsearchOperations.queryForPage(searchQuery, getEntityClass());
}

From source file:com.github.lothar.security.acl.elasticsearch.repository.CustomerRepositoryTest.java

@Test
public void should_search_authorized_customers_only_when_strategy_applied() {
    assertThat(repository.search(new NativeSearchQuery(matchAllQuery()))).containsOnly(aliceSmith, bobSmith);
}

From source file:com.github.lothar.security.acl.elasticsearch.repository.CustomerRepositoryTest.java

@Test
public void should_search_all_customers_when_strategy_not_applied() {
    doWithoutCustomerFilter(new Runnable() {
        @Override//from   w  w w  .  ja  va  2s . c  o  m
        public void run() {
            assertThat(repository.search(new NativeSearchQuery(matchAllQuery()))).containsOnly(aliceSmith,
                    bobSmith, johnDoe, aliceDoe);
        }
    });
}

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

public void testNestedQueries() {
    elasticsearchTemplate.deleteIndex(ChildEntity.class);
    elasticsearchTemplate.deleteIndex(ParentEntity.class);
    elasticsearchTemplate.createIndex(ParentEntity.class);
    elasticsearchTemplate.createIndex(ChildEntity.class);
    elasticsearchTemplate.putMapping(ParentEntity.class);
    elasticsearchTemplate.putMapping(ChildEntity.class);

    // index parents
    ParentEntity parent1 = new ParentEntity("parent1", "First Parent");
    ParentEntity parent2 = new ParentEntity("parent2", "Second Parent");
    ParentEntity parent3 = new ParentEntity("parent3", "Third Parent");
    ParentEntity parent4 = new ParentEntity("parent4", "Fourth Parent");
    ParentEntity parent5 = new ParentEntity("parent5", "Fifth Parent");
    IndexQuery index = new IndexQuery();
    index.setId(parent1.getId());//from   www .ja  va2  s.  c  o m
    index.setObject(parent1);
    elasticsearchTemplate.index(index);
    index = new IndexQuery();
    index.setId(parent2.getId());
    index.setObject(parent2);
    elasticsearchTemplate.index(index);
    index = new IndexQuery();
    index.setId(parent3.getId());
    index.setObject(parent3);
    elasticsearchTemplate.index(index);
    index = new IndexQuery();
    index.setId(parent4.getId());
    index.setObject(parent4);
    elasticsearchTemplate.index(index);
    index = new IndexQuery();
    index.setId(parent5.getId());
    index.setObject(parent5);
    elasticsearchTemplate.index(index);

    ChildEntity child1 = new ChildEntity("child1", "parent1", "First");
    index = new IndexQuery();
    index.setId(child1.getId());
    index.setObject(child1);
    index.setParentId(child1.getParentId());
    elasticsearchTemplate.index(index);

    ChildEntity child2 = new ChildEntity("child2", "parent2", "Second");
    index = new IndexQuery();
    index.setId(child2.getId());
    index.setObject(child2);
    index.setParentId(child2.getParentId());
    elasticsearchTemplate.index(index);

    ChildEntity child3 = new ChildEntity("child3", "parent3", "Third");
    index = new IndexQuery();
    index.setId(child3.getId());
    index.setObject(child3);
    index.setParentId(child3.getParentId());
    elasticsearchTemplate.index(index);

    ChildEntity child4 = new ChildEntity("child4", "parent4", "Fourth");
    index = new IndexQuery();
    index.setId(child4.getId());
    index.setObject(child4);
    index.setParentId(child4.getParentId());
    elasticsearchTemplate.index(index);

    ChildEntity child5 = new ChildEntity("child4", "parent4", "Fifth");
    index = new IndexQuery();
    index.setId(child5.getId());
    index.setObject(child5);
    index.setParentId(child5.getParentId());
    elasticsearchTemplate.index(index);

    elasticsearchTemplate.refresh(ParentEntity.class, true);
    elasticsearchTemplate.refresh(ChildEntity.class, true);

    // which works on children documents and returns parents. find parents of the child
    QueryBuilder query = hasChildQuery(ParentEntity.CHILD_TYPE,
            QueryBuilders.termQuery("name", child1.getName().toLowerCase()));
    List<ParentEntity> parents = elasticsearchTemplate.queryForList(new NativeSearchQuery(query),
            ParentEntity.class);
    // expecting only the first parent as result
    assertEquals(1, parents.size());
    assertEquals(parent1.getId(), parents.get(0).getId());

    // find parent of the child
    query = QueryBuilders.hasChildQuery(ParentEntity.CHILD_TYPE,
            QueryBuilders.termQuery("name", child3.getName().toLowerCase()));
    parents = elasticsearchTemplate.queryForList(new NativeSearchQuery(query), ParentEntity.class);
    assertEquals(1, parents.size());
    assertEquals(parent3.getId(), parents.get(0).getId());

    // find parent of the child with minimum of 2 children and/or max of 4 children
    query = QueryBuilders
            .hasChildQuery(ParentEntity.CHILD_TYPE,
                    QueryBuilders.termQuery("name", child1.getName().toLowerCase()))
            .minChildren(2).maxChildren(4);
    parents = elasticsearchTemplate.queryForList(new NativeSearchQuery(query), ParentEntity.class);
    assertEquals(0, parents.size());

    // How many hits are asked for in the first child query run is controlled using the factor parameter (defaults to 5).
    // For example, when asking for 10 parent docs (with from set to 0), then the child query will execute with 50 hits expected.
    // If not enough parents are found (in our example 10), and there are still more child docs to query, then the child search hits are expanded by multiplying by the incremental_factor (defaults to 2).
    query = QueryBuilders
            .topChildrenQuery(ParentEntity.CHILD_TYPE,
                    QueryBuilders.termQuery("name", child1.getName().toLowerCase()))
            .score("max").factor(5).incrementalFactor(2);
    parents = elasticsearchTemplate.queryForList(new NativeSearchQuery(query), ParentEntity.class);
    assertEquals(1, parents.size());
    assertEquals(parent1.getId(), parents.get(0).getId());

    // which works on parent documents and return children. return child entity
    query = QueryBuilders.hasParentQuery(ParentEntity.PARENT_TYPE,
            QueryBuilders.termQuery("name", child3.getName().toLowerCase()));
    List<ChildEntity> children = elasticsearchTemplate.queryForList(new NativeSearchQuery(query),
            ChildEntity.class);
    assertEquals(1, children.size());
    assertEquals(child3.getId(), children.get(0).getId());

    // return child entity
    query = QueryBuilders.hasParentQuery(ParentEntity.PARENT_TYPE,
            QueryBuilders.termQuery("name", child1.getName().toLowerCase()));
    children = elasticsearchTemplate.queryForList(new NativeSearchQuery(query), ChildEntity.class);
    assertEquals(1, children.size());
    assertEquals(child1.getId(), children.get(0).getId());

    // which performs a query and returns the top X matching children. find all parents that have the first child using topChildren Query
    query = topChildrenQuery(ParentEntity.CHILD_TYPE,
            QueryBuilders.termQuery("name", child2.getName().toLowerCase()));
    parents = elasticsearchTemplate.queryForList(new NativeSearchQuery(query), ParentEntity.class);
    // we're expecting only the first parent as result
    assertEquals(1, parents.size());
    assertEquals(parent2.getId(), parents.get(0).getId());

}