Skip to content
This repository was archived by the owner on Sep 25, 2023. It is now read-only.

Commit 43797ae

Browse files
author
Ben Smith
committed
added search controller and reconfigured
1 parent fcaca12 commit 43797ae

13 files changed

+217
-325
lines changed

data/facebook-aliases.csv

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

src/main/java/org/atlasapi/query/QueryModule.java

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,23 @@
1919
import org.atlasapi.equiv.query.MergeOnOutputQueryExecutor;
2020
import org.atlasapi.feeds.www.DispatchingAtlasModelWriter;
2121
import org.atlasapi.persistence.content.ScheduleResolver;
22+
import org.atlasapi.persistence.content.SearchResolver;
2223
import org.atlasapi.persistence.content.mongo.MongoDBQueryExecutor;
2324
import org.atlasapi.persistence.content.mongo.MongoDbBackedContentStore;
2425
import org.atlasapi.persistence.content.query.KnownTypeQueryExecutor;
2526
import org.atlasapi.persistence.logging.AdapterLog;
2627
import org.atlasapi.query.content.ApplicationConfigurationQueryExecutor;
2728
import org.atlasapi.query.content.CurieResolvingQueryExecutor;
2829
import org.atlasapi.query.content.UriFetchingQueryExecutor;
29-
import org.atlasapi.query.content.fuzzy.DefuzzingQueryExecutor;
3030
import org.atlasapi.query.content.fuzzy.FuzzySearcher;
3131
import org.atlasapi.query.content.fuzzy.RemoteFuzzySearcher;
32+
import org.atlasapi.query.content.search.ContentResolvingSearcher;
33+
import org.atlasapi.query.content.search.DummySearcher;
3234
import org.atlasapi.query.uri.canonical.CanonicalisingFetcher;
3335
import org.atlasapi.query.v2.PeopleController;
3436
import org.atlasapi.query.v2.QueryController;
3537
import org.atlasapi.query.v2.ScheduleController;
38+
import org.atlasapi.query.v2.SearchController;
3639
import org.springframework.beans.factory.annotation.Autowired;
3740
import org.springframework.beans.factory.annotation.Qualifier;
3841
import org.springframework.beans.factory.annotation.Value;
@@ -53,24 +56,9 @@ public class QueryModule {
5356
private @Autowired AdapterLog log;
5457

5558
private @Value("${atlas.search.host}") String searchHost;
56-
57-
@Bean KnownTypeQueryExecutor mongoQueryExecutor() {
58-
return new MongoDBQueryExecutor(store);
59-
}
60-
61-
@Bean KnownTypeQueryExecutor mongoDbQueryExcutorThatFiltersUriQueries() {
62-
MongoDBQueryExecutor executor = new MongoDBQueryExecutor(store);
63-
executor.setFilterUriQueries(true);
64-
return executor;
65-
}
6659

6760
@Bean KnownTypeQueryExecutor queryExecutor() {
68-
KnownTypeQueryExecutor defuzzingExecutor = mongoQueryExecutor();
69-
70-
if (!Strings.isNullOrEmpty(searchHost)) {
71-
FuzzySearcher titleSearcher = new RemoteFuzzySearcher(searchHost);
72-
defuzzingExecutor = new DefuzzingQueryExecutor(mongoQueryExecutor(), mongoDbQueryExcutorThatFiltersUriQueries(), titleSearcher);
73-
}
61+
KnownTypeQueryExecutor defuzzingExecutor = new MongoDBQueryExecutor(store);
7462

7563
UriFetchingQueryExecutor uriFetching = new UriFetchingQueryExecutor(localOrRemoteFetcher, defuzzingExecutor);
7664

@@ -84,17 +72,30 @@ public class QueryModule {
8472
}
8573
}
8674

75+
@Bean SearchResolver searchResolver() {
76+
if (! Strings.isNullOrEmpty(searchHost)) {
77+
FuzzySearcher titleSearcher = new RemoteFuzzySearcher(searchHost);
78+
return new ContentResolvingSearcher(titleSearcher, queryExecutor());
79+
}
80+
81+
return new DummySearcher();
82+
}
83+
8784
@Bean QueryController queryController() {
8885
return new QueryController(queryExecutor(), configFetcher, log, atlasModelOutputter());
8986
}
9087

9188
@Bean ScheduleController schedulerController() {
92-
return new ScheduleController(scheduleResolver, queryExecutor(), configFetcher, log, atlasModelOutputter());
89+
return new ScheduleController(scheduleResolver, configFetcher, log, atlasModelOutputter());
9390
}
9491

9592
@Bean PeopleController peopleController() {
9693
return new PeopleController(queryExecutor(), configFetcher, log, atlasModelOutputter());
9794
}
95+
96+
@Bean SearchController searchController() {
97+
return new SearchController(searchResolver(), configFetcher, log, atlasModelOutputter());
98+
}
9899

99100
@Bean AtlasModelWriter atlasModelOutputter() {
100101
return new DispatchingAtlasModelWriter();

src/main/java/org/atlasapi/query/content/fuzzy/DefuzzingQueryExecutor.java

Lines changed: 0 additions & 141 deletions
This file was deleted.
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.atlasapi.query.content.search;
2+
3+
import java.util.List;
4+
5+
import org.atlasapi.content.criteria.ContentQuery;
6+
import org.atlasapi.media.entity.Brand;
7+
import org.atlasapi.media.entity.Content;
8+
import org.atlasapi.media.entity.Episode;
9+
import org.atlasapi.media.entity.Identified;
10+
import org.atlasapi.media.entity.Item;
11+
import org.atlasapi.media.entity.Person;
12+
import org.atlasapi.media.entity.Publisher;
13+
import org.atlasapi.media.entity.Series;
14+
import org.atlasapi.persistence.content.SearchResolver;
15+
import org.atlasapi.persistence.content.query.KnownTypeQueryExecutor;
16+
import org.atlasapi.query.content.fuzzy.FuzzySearcher;
17+
import org.atlasapi.search.model.Search;
18+
import org.atlasapi.search.model.SearchResults;
19+
20+
import com.google.common.collect.ImmutableList;
21+
import com.metabroadcast.common.query.Selection;
22+
23+
public class ContentResolvingSearcher implements SearchResolver {
24+
private final FuzzySearcher fuzzySearcher;
25+
private final KnownTypeQueryExecutor contentResolver;
26+
27+
public ContentResolvingSearcher(FuzzySearcher fuzzySearcher, KnownTypeQueryExecutor contentResolver) {
28+
this.fuzzySearcher = fuzzySearcher;
29+
this.contentResolver = contentResolver;
30+
}
31+
32+
@Override
33+
public List<Identified> search(Search search, Iterable<Publisher> publishers, Selection selection) {
34+
SearchResults searchResults = fuzzySearcher.contentSearch(search.query(), selection, publishers);
35+
if (searchResults.toUris().isEmpty()) {
36+
return ImmutableList.of();
37+
}
38+
39+
List<Identified> content = contentResolver.executeUriQuery(searchResults.toUris(), ContentQuery.MATCHES_EVERYTHING);
40+
return filterOutSubItems(content);
41+
}
42+
43+
private List<Identified> filterOutSubItems(Iterable<Identified> contents) {
44+
ImmutableList.Builder<Identified> filteredContent = ImmutableList.builder();
45+
46+
for (Identified identified: contents) {
47+
Identified filtered = null;
48+
if (identified instanceof Brand) {
49+
Brand brand = (Brand) ((Brand) identified).copy();
50+
brand.setContents((Iterable<Episode>) null);
51+
brand.setClips(null);
52+
filtered = brand;
53+
} else if (identified instanceof Series) {
54+
Series series = (Series) ((Series) identified).copy();
55+
series.setContents((Iterable<Episode>) null);
56+
series.setClips(null);
57+
filtered = series;
58+
} else if (identified instanceof Content){
59+
Content content = (Content) identified;
60+
filtered = content.copy();
61+
} else if (identified instanceof Person) {
62+
Person person = (Person) ((Person) identified).copy();
63+
person.setContents((Iterable<Item>)null);
64+
filtered = person;
65+
}
66+
67+
if (filtered != null) {
68+
filteredContent.add(filtered);
69+
}
70+
}
71+
return filteredContent.build();
72+
}
73+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.atlasapi.query.content.search;
2+
3+
import java.util.List;
4+
5+
import org.atlasapi.media.entity.Identified;
6+
import org.atlasapi.media.entity.Publisher;
7+
import org.atlasapi.persistence.content.SearchResolver;
8+
import org.atlasapi.search.model.Search;
9+
10+
import com.google.common.collect.ImmutableList;
11+
import com.metabroadcast.common.query.Selection;
12+
13+
public class DummySearcher implements SearchResolver {
14+
15+
private final Iterable<Identified> respondWith;
16+
17+
public DummySearcher() {
18+
this(ImmutableList.<Identified>of());
19+
}
20+
21+
public DummySearcher(Iterable<Identified> respondWith) {
22+
this.respondWith = respondWith;
23+
}
24+
25+
@Override
26+
public List<Identified> search(Search arg0, Iterable<Publisher> arg1, Selection arg2) {
27+
return ImmutableList.copyOf(respondWith);
28+
}
29+
}

0 commit comments

Comments
 (0)