List of usage examples for org.springframework.data.elasticsearch.core.query NativeSearchQuery NativeSearchQuery
public NativeSearchQuery(QueryBuilder query)
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()); }