Skip to content

Commit fb97644

Browse files
committed
adds support for highlighting, not yet forwarded to FR
1 parent 0003b10 commit fb97644

4 files changed

Lines changed: 54 additions & 30 deletions

File tree

src/main/java/com/arcadeanalytics/index/ElasticBulkGraphIndexer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
* Licensed under the Apache License, Version 2.0 (the "License");
1010
* you may not use this file except in compliance with the License.
1111
* You may obtain a copy of the License at
12-
*
12+
*
1313
* http://www.apache.org/licenses/LICENSE-2.0
14-
*
14+
*
1515
* Unless required by applicable law or agreed to in writing, software
1616
* distributed under the License is distributed on an "AS IS" BASIS,
1717
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -101,6 +101,7 @@ public ElasticBulkGraphIndexer(Client client, String indexName) {
101101
" \"mapping\": {\n" +
102102
" \"type\": \"string\",\n" +
103103
" \"analyzer\": \"standard\",\n" +
104+
" \"store\": \"yes\",\n" +
104105
" \"term_vector\": \"with_positions_offsets\",\n" +
105106
" \"fields\": {\n" +
106107
" \"raw\": {\n" +
@@ -125,6 +126,7 @@ public ElasticBulkGraphIndexer(Client client, String indexName) {
125126
" \"mapping\": {\n" +
126127
" \"type\": \"string\",\n" +
127128
" \"analyzer\": \"standard\",\n" +
129+
" \"store\": \"yes\",\n" +
128130
" \"term_vector\": \"with_positions_offsets\",\n" +
129131
" \"fields\": {\n" +
130132
" \"raw\": {\n" +

src/main/java/com/arcadeanalytics/repository/DataSourceRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.stereotype.Repository;
2929

3030
import java.util.List;
31+
import java.util.Optional;
3132

3233

3334
/**
@@ -37,6 +38,8 @@
3738
@Repository
3839
public interface DataSourceRepository extends JpaRepository<DataSource, Long> {
3940

41+
Optional<DataSource> findByName(String name);
42+
4043
Page<DataSource> findByWorkspaceUserUserLogin(String currentUserLogin, Pageable pageable);
4144

4245
List<DataSource> findByWorkspaceUserUserLogin(String currentUserLogin);

src/main/java/com/arcadeanalytics/service/ElasticGraphIndexerService.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.elasticsearch.cluster.ClusterState;
4747
import org.elasticsearch.cluster.metadata.IndexMetaData;
4848
import org.elasticsearch.index.query.QueryBuilders;
49+
import org.elasticsearch.index.query.QueryStringQueryBuilder;
4950
import org.elasticsearch.search.SearchHit;
5051
import org.elasticsearch.search.aggregations.AggregationBuilder;
5152
import org.elasticsearch.search.aggregations.AggregationBuilders;
@@ -219,26 +220,28 @@ public List<Sprite> search(DataSource dataSource, SearchQueryDTO query) throws I
219220
final String indexName = dataSource.getId().toString();
220221

221222
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(indexName)
222-
// .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
223-
.setQuery(QueryBuilders.queryStringQuery(query.getQuery())
224-
.defaultOperator(AND))
225223
.setHighlighterForceSource(true)
226224
.setHighlighterEncoder("default")
227225
.setHighlighterPreTags("<em>")
228226
.setHighlighterPostTags("</em>")
229227
.setSize(query.getNumOfDocuments());
230228

229+
final QueryStringQueryBuilder queryBuilder = QueryBuilders.queryStringQuery(query.getQuery()).defaultOperator(AND);
230+
231231
indexFields(indexName, client, query.isUseEdges())
232232
.stream()
233233
.forEach(field -> {
234-
searchRequestBuilder.addHighlightedField(field,-1,-1);
235-
searchRequestBuilder.addHighlightedField(field + ".raw",-1,-1);
234+
searchRequestBuilder.addHighlightedField(field);
235+
queryBuilder.field(field);
236+
// searchRequestBuilder.addHighlightedField(field + ".raw");
236237
});
237238

238239
if (query.getIds().length > 0) {
239240
searchRequestBuilder.setPostFilter(QueryBuilders.termsQuery(ARCADE_ID, query.getIds()));
240241
}
241242

243+
searchRequestBuilder.setQuery(queryBuilder);
244+
242245
log.debug("query:: {}", searchRequestBuilder.toString());
243246
SearchResponse searchResponse = searchRequestBuilder
244247
.execute()
@@ -253,9 +256,14 @@ public List<Sprite> search(DataSource dataSource, SearchQueryDTO query) throws I
253256
return Stream.of(hits)
254257
// .peek(h -> log.info("h:: " + h.toString()))
255258
// .peek(h -> log.info("hf:: " + h.getHighlightFields().size()))
256-
.map(h -> h.getSource())
259+
// .map(h -> h.getSource())
257260
// .peek(s -> log.info("s:: " + s))
258-
.map(s -> new Sprite().load(s))
261+
.map(hit -> {
262+
263+
Sprite sprite = new Sprite().load(hit.getSource());
264+
// hit.getHighlightFields().f
265+
return sprite;
266+
})
259267
.collect(Collectors.toList());
260268

261269
}
@@ -283,6 +291,9 @@ public Map<String, Object> aggregate(DataSource dataSource,
283291

284292
final SearchResponse searchResponse = termAggregations(client, indexName, classes, fields, query, minDocCount, maxValuesPerField);
285293

294+
295+
log.debug("tree: {}", searchResponse.toString());
296+
286297
Map<String, Object> facetsTree = searchResponseToMap(fields, searchResponse);
287298

288299
log.info("done aggregation on data-source {}", dataSource.getId(), minDocCount, maxValuesPerField);
@@ -310,7 +321,7 @@ public Map<String, Object> aggregate(DataSource dataSource,
310321

311322
Map<String, Object> facetsTree = searchResponseToMap(fields, searchResponse);
312323

313-
log.info("done aggregation on data-source {}", dataSource.getName(), minDocCount, maxValuesPerField);
324+
log.info("done aggregation on data-source {}", dataSource.getId(), minDocCount, maxValuesPerField);
314325

315326
return facetsTree;
316327

@@ -389,7 +400,7 @@ private SearchResponse termAggregations(Client client,
389400

390401

391402
if (query.getIds().length > 0) {
392-
log.info("aggregate only on :: {}", truncate(join(",", query.getIds()), 100));
403+
log.debug("aggregate only on :: {}", truncate(join(",", query.getIds()), 100));
393404
searchRequestBuilder.setQuery(QueryBuilders.boolQuery()
394405
.filter(QueryBuilders.termsQuery(ARCADE_ID, query.getIds())));
395406
}

src/test/java/com/arcadeanalytics/service/ElasticGraphIndexerServiceIntTest.java

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.arcadeanalytics.domain.enumeration.DataSourceType;
2828
import com.arcadeanalytics.repository.DataSourceRepository;
2929
import com.arcadeanalytics.service.dto.SearchQueryDTO;
30-
import com.google.common.collect.Sets;
3130
import org.junit.Before;
3231
import org.junit.BeforeClass;
3332
import org.junit.ClassRule;
@@ -45,6 +44,7 @@
4544
import java.util.stream.Collectors;
4645

4746
import static com.arcadeanalytics.index.IndexConstants.ARCADE_ID;
47+
import static com.google.common.collect.Sets.newHashSet;
4848
import static java.util.Collections.emptySet;
4949
import static org.assertj.core.api.Assertions.assertThat;
5050

@@ -76,18 +76,19 @@ public static void beforeClass() {
7676
@Before
7777
public void setUp() throws Exception {
7878
//given
79-
dataSource = new DataSource()
80-
.name("demodb")
81-
.description("desc")
82-
.remote(false)
83-
.type(DataSourceType.ORIENTDB3)
84-
.server(container.getContainerIpAddress())
85-
.port(container.getFirstMappedPort())
86-
.database("demodb")
87-
.username("admin")
88-
.password("admin");
89-
90-
dataSourceRepository.save(dataSource);
79+
80+
dataSource = dataSourceRepository.findByName("demodb").orElseGet(() ->
81+
dataSourceRepository.save(new DataSource()
82+
.name("demodb")
83+
.description("desc")
84+
.remote(false)
85+
.type(DataSourceType.ORIENTDB3)
86+
.server(container.getContainerIpAddress())
87+
.port(container.getFirstMappedPort())
88+
.database("demodb")
89+
.username("admin")
90+
.password("admin"))
91+
);
9192

9293
if (!service.hasIndex(dataSource)) {
9394
//when --> ASYNC!!!!!
@@ -102,6 +103,8 @@ public void setUp() throws Exception {
102103
@Test(expected = RuntimeException.class)
103104
public void shouldDeleteIndex() throws IOException {
104105

106+
assertThat(service.hasIndex(dataSource)).isTrue();
107+
105108
final boolean deleted = service.deleteIndex(dataSource);
106109

107110
assertThat(deleted).isTrue();
@@ -110,6 +113,7 @@ public void shouldDeleteIndex() throws IOException {
110113
SearchQueryDTO queryDTO = new SearchQueryDTO();
111114
service.search(dataSource, queryDTO);
112115

116+
assertThat(service.hasIndex(dataSource)).isFalse();
113117

114118
}
115119

@@ -118,9 +122,11 @@ public void shouldFindSameDocumentsWithSimpleSearchAndFilteringOnIds() throws IO
118122
//then simple search for frank and rob
119123
SearchQueryDTO queryDTO = new SearchQueryDTO();
120124
//explicit OR 'cause default search are in AND
121-
queryDTO.setQuery("roma OR frank");
125+
queryDTO.setQuery("Name:roma OR Name:frank");
122126
List<Sprite> docs = service.search(dataSource, queryDTO);
123-
assertThat(docs).hasSize(10);
127+
assertThat(docs).hasSize(9);
128+
129+
// docs.forEach(sprite -> assertThat(sprite.valueOf("Name")).contains("frank", "roma", "Frank", "Roma"));
124130

125131
String[] ids = docs.stream()
126132
.map(s -> s.valueOf(ARCADE_ID))
@@ -132,7 +138,9 @@ public void shouldFindSameDocumentsWithSimpleSearchAndFilteringOnIds() throws IO
132138
queryDTO.setIds(ids);
133139
//now search for all documents and filter by previous ids
134140
docs = service.search(dataSource, queryDTO);
135-
assertThat(docs).hasSize(10);
141+
assertThat(docs).hasSize(9);
142+
143+
// docs.forEach(sprite -> assertThat(sprite.valueOf("Name")).contains("frank", "roma", "Frank", "Roma"));
136144

137145
}
138146

@@ -146,9 +154,10 @@ public void shouldProvideFacetingOverNodesPropertyValues() throws IOException {
146154

147155
List<Sprite> docs = service.search(dataSource, queryDTO);
148156

149-
//search limited to 10
157+
//search limited to 50
150158
assertThat(docs).hasSize(50);
151159

160+
//maps the ids of retrieved documents
152161
String[] ids = docs.stream()
153162
.map(s -> s.valueOf(ARCADE_ID))
154163
.collect(Collectors.toList())
@@ -161,7 +170,6 @@ public void shouldProvideFacetingOverNodesPropertyValues() throws IOException {
161170

162171
final Map<String, Object> aggregate = service.aggregate(dataSource, queryDTO, emptySet(), emptySet(), 1, 20);
163172

164-
System.out.println("aggregate = " + aggregate);
165173
assertThat(aggregate).containsKeys("Countries");
166174

167175
final Map<String, Object> person = (Map<String, Object>) aggregate.get("Countries");
@@ -199,7 +207,7 @@ public void shouldProvideFacetingOverNodesPropertyValuesWithClassesAndProperty()
199207
queryDTO.setUseEdges(true);
200208
queryDTO.setIds(ids);
201209

202-
final Map<String, Object> aggregate = service.aggregate(dataSource, queryDTO, Sets.newHashSet("Countries"), Sets.newHashSet("Code"), 1, 20);
210+
final Map<String, Object> aggregate = service.aggregate(dataSource, queryDTO, newHashSet("Countries"), newHashSet("Code"), 1, 20);
203211

204212
assertThat(aggregate).containsKeys("Countries");
205213

0 commit comments

Comments
 (0)