summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Peter Christen <mc@yacy.net>2026-03-25 00:13:17 +0100
committerMichael Peter Christen <mc@yacy.net>2026-03-25 00:13:17 +0100
commit11a5f10c77714b7a4c99902336dac9fe694b9f6e (patch)
tree97018e03c2158ffe14e1e40258776fd5d3c6b0a6
parent1edee7e1276e1ea37a01b55209c118029a079b39 (diff)
modified ranking and query parser to allow more matches and better ranking
-rw-r--r--source/net/yacy/search/query/QueryGoal.java13
-rw-r--r--source/net/yacy/search/query/QueryParams.java27
2 files changed, 22 insertions, 18 deletions
diff --git a/source/net/yacy/search/query/QueryGoal.java b/source/net/yacy/search/query/QueryGoal.java
index 9a35ae9cc..e621df3c5 100644
--- a/source/net/yacy/search/query/QueryGoal.java
+++ b/source/net/yacy/search/query/QueryGoal.java
@@ -392,7 +392,7 @@ public class QueryGoal {
if (isCatchall()) return new StringBuilder(AbstractSolrConnector.CATCHALL_QUERY);
// add goal query
- return getGoalQuery();
+ return getGoalQuery(false);
}
/**
@@ -496,7 +496,7 @@ public class QueryGoal {
if (isCatchall()) return new StringBuilder(AbstractSolrConnector.CATCHALL_QUERY);
// add goal query
- StringBuilder w = getGoalQuery();
+ StringBuilder w = getGoalQuery(true);
q.append(w);
// combine these queries for all relevant fields
@@ -513,21 +513,22 @@ public class QueryGoal {
return q;
}
- private StringBuilder getGoalQuery() {
+ private StringBuilder getGoalQuery(final boolean strictAllTerms) {
int wc = 0;
StringBuilder w = new StringBuilder(80);
for (String s: include_strings) {
if (Segment.catchallString.equals(s)) continue;
- if (wc > 0) w.append(" AND ");
+ if (wc > 0) w.append(strictAllTerms ? " AND " : " ");
if (s.indexOf('~') >= 0 || s.indexOf('*') >= 0 || s.indexOf('?') >= 0) w.append(s); else w.append(dq).append(s).append(dq);
wc++;
}
for (String s: exclude_strings){
- if (wc > 0) w.append(" AND -");
+ if (wc > 0) w.append(strictAllTerms ? " AND -" : " -");
+ else w.append('-');
if (s.indexOf('~') >= 0 || s.indexOf('*') >= 0 || s.indexOf('?') >= 0) w.append(s); else w.append(dq).append(s).append(dq);
wc++;
}
- if (wc > 1) {w.insert(0, '('); w.append(')');}
+ if (strictAllTerms && wc > 1) {w.insert(0, '('); w.append(')');}
return w;
}
diff --git a/source/net/yacy/search/query/QueryParams.java b/source/net/yacy/search/query/QueryParams.java
index ae4f392ce..f0e079fca 100644
--- a/source/net/yacy/search/query/QueryParams.java
+++ b/source/net/yacy/search/query/QueryParams.java
@@ -621,20 +621,23 @@ public final class QueryParams {
* @param filterQueries a mutable list of filter queries, initialized with filters related to content domain. Must not be null.
* @return a Solr query instance ready to use
*/
- private SolrQuery solrQuery(final boolean getFacets, final List<String> filterQueries) {
- if (this.cachedQuery != null) {
- this.cachedQuery.setStart(this.offset);
- if (!getFacets) this.cachedQuery.setFacet(false);
- return this.cachedQuery;
+ private SolrQuery solrQuery(final boolean getFacets, final List<String> filterQueries) {
+ if (this.cachedQuery != null) {
+ this.cachedQuery.setStart(this.offset);
+ if (!getFacets) this.cachedQuery.setFacet(false);
+ return this.cachedQuery;
}
- // construct query
- final SolrQuery params = getBasicParams(getFacets, filterQueries);
- int rankingProfile = this.ranking.coeff_date == RankingProfile.COEFF_MAX ? 1 : (this.modifier.sitehash != null || this.modifier.sitehost != null) ? 2 : 0;
- params.setQuery(this.queryGoal.collectionTextQuery().toString());
- Ranking actRanking = indexSegment.fulltext().getDefaultConfiguration().getRanking(rankingProfile); // for a by-date ranking select different ranking profile
-
- String fq = actRanking.getFilterQuery();
+ // construct query
+ final SolrQuery params = getBasicParams(getFacets, filterQueries);
+ int rankingProfile = this.ranking.coeff_date == RankingProfile.COEFF_MAX ? 1 : (this.modifier.sitehash != null || this.modifier.sitehost != null) ? 2 : 0;
+ params.setQuery(this.queryGoal.collectionTextQuery().toString());
+ if (this.queryGoal.getIncludeSize() > 1) {
+ params.setParam(DisMaxParams.MM, "1");
+ }
+ Ranking actRanking = indexSegment.fulltext().getDefaultConfiguration().getRanking(rankingProfile); // for a by-date ranking select different ranking profile
+
+ String fq = actRanking.getFilterQuery();
String bq = actRanking.getBoostQuery();
String bf = actRanking.getBoostFunction();
final String qf = actRanking.getQueryFields();