1
1
mirror of https://github.com/MarginaliaSearch/MarginaliaSearch.git synced 2025-10-06 07:32:38 +02:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Viktor Lofgren
ef3f175ede (search) Don't clobber the search query URL with default values 2025-01-10 15:57:30 +01:00
Viktor Lofgren
bbe4b5d9fd Revert experimental changes 2025-01-10 15:52:02 +01:00
7 changed files with 50 additions and 164 deletions

View File

@@ -294,105 +294,4 @@ public class SearchOperator {
}
}
public DecoratedSearchResults doSearchFastTrack1(SearchParameters userParams) {
var queryParams = paramFactory.forRegularSearch(userParams);
QueryResponse queryResponse = queryClient.search(queryParams);
var queryResults = getResultsFromQuery(queryResponse).results;
// Cluster the results based on the query response
List<ClusteredUrlDetails> clusteredResults = SearchResultClusterer
.selectStrategy(queryResponse)
.clusterResults(queryResults, 25);
String focusDomain = queryResponse.domain();
int focusDomainId = (focusDomain == null || focusDomain.isBlank())
? -1
: domainQueries.tryGetDomainId(new EdgeDomain(focusDomain)).orElse(0);
List<ResultsPage> resultPages = IntStream.rangeClosed(1, queryResponse.totalPages())
.mapToObj(number -> new ResultsPage(
number,
number == userParams.page(),
userParams.withPage(number).renderUrl()
))
.toList();
// Return the results to the user
return DecoratedSearchResults.builder()
.params(userParams)
.problems(List.of())
.evalResult("")
.results(clusteredResults)
.filters(new SearchFilters(userParams))
.focusDomain(focusDomain)
.focusDomainId(focusDomainId)
.resultPages(resultPages)
.build();
}
public DecoratedSearchResults doSearchFastTrack2(SearchParameters userParams) {
var queryParams = paramFactory.forRegularSearch(userParams);
QueryResponse queryResponse = queryClient.search(queryParams);
var queryResults = getResultsFromQuery(queryResponse).results;
// Cluster the results based on the query response
List<ClusteredUrlDetails> clusteredResults = SearchResultClusterer
.noOpClustering(queryResults, queryResults.size());
String focusDomain = queryResponse.domain();
int focusDomainId = (focusDomain == null || focusDomain.isBlank())
? -1
: domainQueries.tryGetDomainId(new EdgeDomain(focusDomain)).orElse(0);
List<ResultsPage> resultPages = IntStream.rangeClosed(1, queryResponse.totalPages())
.mapToObj(number -> new ResultsPage(
number,
number == userParams.page(),
userParams.withPage(number).renderUrl()
))
.toList();
// Return the results to the user
return DecoratedSearchResults.builder()
.params(userParams)
.problems(List.of())
.evalResult("")
.results(clusteredResults)
.filters(new SearchFilters(userParams))
.focusDomain(focusDomain)
.focusDomainId(focusDomainId)
.resultPages(resultPages)
.build();
}
public DecoratedSearchResults doSearchFastTrack3(SearchParameters userParams) {
var queryParams = paramFactory.forRegularSearch(userParams);
QueryResponse queryResponse = queryClient.search(queryParams);
var queryResults = getResultsFromQuery(queryResponse).results;
// Cluster the results based on the query response
List<ClusteredUrlDetails> clusteredResults = SearchResultClusterer
.noOpClustering(queryResults, queryResults.size());
List<ResultsPage> resultPages = IntStream.rangeClosed(1, queryResponse.totalPages())
.mapToObj(number -> new ResultsPage(
number,
number == userParams.page(),
userParams.withPage(number).renderUrl()
))
.toList();
// Return the results to the user
return DecoratedSearchResults.builder()
.params(userParams)
.problems(List.of())
.evalResult("")
.results(clusteredResults)
.filters(new SearchFilters(userParams))
.focusDomain(null)
.focusDomainId(-1)
.resultPages(resultPages)
.build();
}
}

View File

@@ -17,13 +17,13 @@ public class SearchResultClusterer {
public static SearchResultClusterStrategy selectStrategy(QueryResponse response) {
if (response.domain() != null && !response.domain().isBlank())
return SearchResultClusterer::noOpClustering;
return SearchResultClusterer::noOp;
return SearchResultClusterer::byDomain;
}
/** No clustering, just return the results as is */
public static List<ClusteredUrlDetails> noOpClustering(List<UrlDetails> results, int total) {
private static List<ClusteredUrlDetails> noOp(List<UrlDetails> results, int total) {
if (results.isEmpty())
return List.of();

View File

@@ -21,8 +21,7 @@ public record SearchParameters(WebsiteUrl url,
SearchTitleParameter searchTitle,
SearchAdtechParameter adtech,
boolean newFilter,
int page,
int debug
int page
) {
public static SearchParameters defaultsForQuery(WebsiteUrl url, String query, int page) {
@@ -35,8 +34,7 @@ public record SearchParameters(WebsiteUrl url,
SearchTitleParameter.DEFAULT,
SearchAdtechParameter.DEFAULT,
false,
page,
0);
page);
}
public String profileStr() {
@@ -44,30 +42,30 @@ public record SearchParameters(WebsiteUrl url,
}
public SearchParameters withProfile(SearchProfile profile) {
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, true, page, debug);
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, true, page);
}
public SearchParameters withJs(SearchJsParameter js) {
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, true, page, debug);
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, true, page);
}
public SearchParameters withAdtech(SearchAdtechParameter adtech) {
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, true, page, debug);
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, true, page);
}
public SearchParameters withRecent(SearchRecentParameter recent) {
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, true, page, debug);
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, true, page);
}
public SearchParameters withTitle(SearchTitleParameter title) {
return new SearchParameters(url, query, profile, js, recent, title, adtech, true, page, debug);
return new SearchParameters(url, query, profile, js, recent, title, adtech, true, page);
}
public SearchParameters withPage(int page) {
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, false, page, debug);
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, false, page);
}
public SearchParameters withQuery(String query) {
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, false, page, debug);
return new SearchParameters(url, query, profile, js, recent, searchTitle, adtech, false, page);
}
public String renderUrlWithoutSiteFocus() {
@@ -86,18 +84,33 @@ public record SearchParameters(WebsiteUrl url,
}
public String renderUrl() {
String path = String.format("/search?query=%s&profile=%s&js=%s&adtech=%s&recent=%s&searchTitle=%s&newfilter=%s&page=%d",
URLEncoder.encode(query, StandardCharsets.UTF_8),
URLEncoder.encode(profile.filterId, StandardCharsets.UTF_8),
URLEncoder.encode(js.value, StandardCharsets.UTF_8),
URLEncoder.encode(adtech.value, StandardCharsets.UTF_8),
URLEncoder.encode(recent.value, StandardCharsets.UTF_8),
URLEncoder.encode(searchTitle.value, StandardCharsets.UTF_8),
Boolean.valueOf(newFilter).toString(),
page
);
return path;
StringBuilder pathBuilder = new StringBuilder("/search?");
pathBuilder.append("query=").append(URLEncoder.encode(query, StandardCharsets.UTF_8));
if (profile != SearchProfile.NO_FILTER) {
pathBuilder.append("&profile=").append(URLEncoder.encode(profile.filterId, StandardCharsets.UTF_8));
}
if (js != SearchJsParameter.DEFAULT) {
pathBuilder.append("&js=").append(URLEncoder.encode(js.value, StandardCharsets.UTF_8));
}
if (adtech != SearchAdtechParameter.DEFAULT) {
pathBuilder.append("&adtech=").append(URLEncoder.encode(adtech.value, StandardCharsets.UTF_8));
}
if (recent != SearchRecentParameter.DEFAULT) {
pathBuilder.append("&recent=").append(URLEncoder.encode(recent.value, StandardCharsets.UTF_8));
}
if (searchTitle != SearchTitleParameter.DEFAULT) {
pathBuilder.append("&searchTitle=").append(URLEncoder.encode(searchTitle.value, StandardCharsets.UTF_8));
}
if (page != 1) {
pathBuilder.append("&page=").append(page);
}
if (newFilter) {
pathBuilder.append("&newfilter=").append(Boolean.valueOf(newFilter).toString());
}
return pathBuilder.toString();
}
public RpcTemporalBias.Bias temporalBias() {

View File

@@ -17,38 +17,15 @@ public class SearchCommand implements SearchCommandInterface {
@Inject
public SearchCommand(SearchOperator searchOperator) {
public SearchCommand(SearchOperator searchOperator){
this.searchOperator = searchOperator;
}
@Override
public Optional<ModelAndView<?>> process(SearchParameters parameters) throws InterruptedException {
if (parameters.debug() == 0) {
DecoratedSearchResults results = searchOperator.doSearch(parameters);
return Optional.of(new MapModelAndView("serp/main.jte",
Map.of("results", results, "navbar", NavbarModel.SEARCH)
));
}
else if (parameters.debug() == 1) {
DecoratedSearchResults results = searchOperator.doSearchFastTrack1(parameters);
return Optional.of(new MapModelAndView("serp/main.jte",
Map.of("results", results, "navbar", NavbarModel.SEARCH)
));
}
else if (parameters.debug() == 2) {
DecoratedSearchResults results = searchOperator.doSearchFastTrack2(parameters);
return Optional.of(new MapModelAndView("serp/main.jte",
Map.of("results", results, "navbar", NavbarModel.SEARCH)
));
}
else if (parameters.debug() == 3) {
DecoratedSearchResults results = searchOperator.doSearchFastTrack3(parameters);
return Optional.of(new MapModelAndView("serp/main.jte",
Map.of("results", results, "navbar", NavbarModel.SEARCH)
));
}
else {
return Optional.empty();
}
DecoratedSearchResults results = searchOperator.doSearch(parameters);
return Optional.of(new MapModelAndView("serp/main.jte",
Map.of("results", results, "navbar", NavbarModel.SEARCH)
));
}
}

View File

@@ -60,8 +60,7 @@ public class SearchFilters {
SearchTitleParameter.DEFAULT,
SearchAdtechParameter.DEFAULT,
false,
1,
0));
1));
}
public SearchFilters(SearchParameters parameters) {

View File

@@ -39,8 +39,7 @@ public class SearchQueryService {
@QueryParam String recent,
@QueryParam String searchTitle,
@QueryParam String adtech,
@QueryParam Integer page,
@QueryParam Integer debug
@QueryParam Integer page
) {
try {
SearchParameters parameters = new SearchParameters(websiteUrl,
@@ -51,9 +50,7 @@ public class SearchQueryService {
SearchTitleParameter.parse(searchTitle),
SearchAdtechParameter.parse(adtech),
false,
Objects.requireNonNullElse(page,1),
Objects.requireNonNullElse(debug,0)
);
Objects.requireNonNullElse(page,1));
return searchCommandEvaulator.eval(parameters);
}

View File

@@ -36,10 +36,11 @@
</div>
@if (filters.showRecentOption.isSet()) <input type="hidden" name="js" value="${filters.removeJsOption.value()}"> @endif
@if (filters.reduceAdtechOption.isSet()) <input type="hidden" name="adtech" value="${filters.reduceAdtechOption.value()}"> @endif
@if (filters.searchTitleOption.isSet()) <input type="hidden" name="searchTitle" value="${filters.searchTitleOption.value()}"> @endif
@if (filters.showRecentOption.isSet()) <input type="hidden" name="recent" value="${filters.showRecentOption.value()}"> @endif
<input type="hidden" name="js" value="${filters.removeJsOption.value()}">
<input type="hidden" name="adtech" value="${filters.reduceAdtechOption.value()}">
<input type="hidden" name="searchTitle" value="${filters.searchTitleOption.value()}">
<input type="hidden" name="profile" value="${profile}">
<input type="hidden" name="recent" value="${filters.showRecentOption.value()}">
</form>