From c912d3127d9f609ecbf93d4d84182953cca60a63 Mon Sep 17 00:00:00 2001 From: vlofgren Date: Sat, 3 Sep 2022 18:35:04 +0200 Subject: [PATCH] Better hints. --- .../wmsa/edge/search/EdgeSearchOperator.java | 33 ++++++++++--------- .../search/query/model/EdgeSearchQuery.java | 7 ++++ .../main/resources/static/edge/style-new.css | 1 + .../templates/edge/search-results.hdb | 3 +- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/marginalia_nu/src/main/java/nu/marginalia/wmsa/edge/search/EdgeSearchOperator.java b/marginalia_nu/src/main/java/nu/marginalia/wmsa/edge/search/EdgeSearchOperator.java index ddefb2f7..834e5fd8 100644 --- a/marginalia_nu/src/main/java/nu/marginalia/wmsa/edge/search/EdgeSearchOperator.java +++ b/marginalia_nu/src/main/java/nu/marginalia/wmsa/edge/search/EdgeSearchOperator.java @@ -189,7 +189,18 @@ public class EdgeSearchOperator { } resultList.sort(resultListComparator); - resultList.removeIf(new UrlDeduplicator(processedQuery.specs.limitByDomain)::shouldRemove); + + UrlDeduplicator deduplicator = new UrlDeduplicator(processedQuery.specs.limitByDomain); + List retList = new ArrayList<>(processedQuery.specs.limitTotal); + + for (var item : resultList) { + if (retList.size() >= processedQuery.specs.limitTotal) + break; + + if (!deduplicator.shouldRemove(item)) { + retList.add(item); + } + } return new DecoratedSearchResultSet(resultList); } @@ -207,16 +218,13 @@ public class EdgeSearchOperator { problems.add("Try rephrasing the query, changing the word order or using synonyms to get different results. Tips."); } - if (humanQuery.toLowerCase().matches(".*(definition|define).*")) { + Set representativeKeywords = processedQuery.getAllKeywords(); + if (representativeKeywords.size()>1 && (representativeKeywords.contains("definition") || representativeKeywords.contains("define") || representativeKeywords.contains("meaning"))) + { problems.add("Tip: Try using a query that looks like define:word if you want a dictionary definition"); } } - if (humanQuery.contains("/")) { - problems.clear(); - problems.add("There is a known bug with search terms that contain a slash that causes them to be marked as unsupported; as a workaround, try using a dash instead. AC-DC will work, AC/DC does not."); - } - return problems; } @@ -289,22 +297,15 @@ public class EdgeSearchOperator { EdgeSearchResultSet resultSet = indexClient.query(ctx, processedQuery.specs); Set ret = new HashSet<>(); - logger.debug("{}", resultSet); - - for (IndexBlock block : indexBlockSearchOrder) { + for (IndexBlock block : IndexBlock.values()) { var results = resultSet.resultsList.getOrDefault(block, Collections.emptyList()); - for (var result : resultDecorator.getAllUrlDetails(results, block)) { - if (ret.size() > 100) break; - ret.add(result); - } + ret.addAll(resultDecorator.getAllUrlDetails(results, block)); } return ret; } - static final IndexBlock[] indexBlockSearchOrder = Arrays.stream(IndexBlock.values()).sorted(Comparator.comparing(i -> i.sortOrder)).toArray(IndexBlock[]::new); - private Iterable spellCheckTerms(Context ctx, EdgeSearchQuery disjointedQuery) { return Observable.fromIterable(disjointedQuery.searchTermsHuman) .subscribeOn(Schedulers.io()) diff --git a/marginalia_nu/src/main/java/nu/marginalia/wmsa/edge/search/query/model/EdgeSearchQuery.java b/marginalia_nu/src/main/java/nu/marginalia/wmsa/edge/search/query/model/EdgeSearchQuery.java index 5cdc8892..2e3a246c 100644 --- a/marginalia_nu/src/main/java/nu/marginalia/wmsa/edge/search/query/model/EdgeSearchQuery.java +++ b/marginalia_nu/src/main/java/nu/marginalia/wmsa/edge/search/query/model/EdgeSearchQuery.java @@ -18,4 +18,11 @@ public class EdgeSearchQuery { specs = justSpecs; } + public Set getAllKeywords() { + Set keywords = new HashSet<>(100); + for (var sq : specs.subqueries) { + keywords.addAll(sq.searchTermsInclude); + } + return keywords; + } } diff --git a/marginalia_nu/src/main/resources/static/edge/style-new.css b/marginalia_nu/src/main/resources/static/edge/style-new.css index f4cf534d..599a487f 100644 --- a/marginalia_nu/src/main/resources/static/edge/style-new.css +++ b/marginalia_nu/src/main/resources/static/edge/style-new.css @@ -152,6 +152,7 @@ article > section > p { display: none; } .problems ul { flex-grow: 1; + margin-left: -1em; } .card .description { diff --git a/marginalia_nu/src/main/resources/templates/edge/search-results.hdb b/marginalia_nu/src/main/resources/templates/edge/search-results.hdb index 0572c779..552cb58f 100644 --- a/marginalia_nu/src/main/resources/templates/edge/search-results.hdb +++ b/marginalia_nu/src/main/resources/templates/edge/search-results.hdb @@ -39,9 +39,10 @@ {{/if}} + {{#unless evalResult}}{{#if problems}}

Suggestions

    {{#each problems}}
  • {{{.}}}
  • {{/each}}
{{/if}}{{/unless}} + {{#each results}}{{>edge/search-result}}{{/each}} - {{#unless evalResult}}{{#if problems}}

Suggestions

    {{#each problems}}
  • {{{.}}}
  • {{/each}}
{{/if}}{{/unless}}