From 63e5b0ab187bb3cf20474e4e6b97d3e10d27ad9f Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Sun, 25 Aug 2024 12:06:56 +0200 Subject: [PATCH] (index) Correct weightedCounts calculations --- .../index/forward/spans/DocumentSpan.java | 9 +++-- .../results/IndexResultScoreCalculator.java | 39 ++++++++----------- 2 files changed, 22 insertions(+), 26 deletions(-) diff --git a/code/index/index-forward/java/nu/marginalia/index/forward/spans/DocumentSpan.java b/code/index/index-forward/java/nu/marginalia/index/forward/spans/DocumentSpan.java index 60432a06..54578114 100644 --- a/code/index/index-forward/java/nu/marginalia/index/forward/spans/DocumentSpan.java +++ b/code/index/index-forward/java/nu/marginalia/index/forward/spans/DocumentSpan.java @@ -17,15 +17,16 @@ public class DocumentSpan { this.startsEnds = null; } - public boolean intersects(IntIterator positionsIter) { + public int countIntersections(IntIterator positionsIter) { if (null == startsEnds || !positionsIter.hasNext()) { - return false; + return 0; } var iter = startsEnds.iterator(); int start = -1; int end = -1; + int cnt = 0; while (iter.hasNext() && positionsIter.hasNext()) { if (start < 0) { start = iter.nextInt(); @@ -38,13 +39,13 @@ public class DocumentSpan { } if (position < end) { - return true; + cnt++; } start = -1; } - return false; + return cnt; } public boolean containsPosition(int position) { diff --git a/code/index/java/nu/marginalia/index/results/IndexResultScoreCalculator.java b/code/index/java/nu/marginalia/index/results/IndexResultScoreCalculator.java index 67d6243c..41fbca55 100644 --- a/code/index/java/nu/marginalia/index/results/IndexResultScoreCalculator.java +++ b/code/index/java/nu/marginalia/index/results/IndexResultScoreCalculator.java @@ -245,9 +245,6 @@ public class IndexResultScoreCalculator { if (positions[i] != null && ctx.regularMask.get(i)) { searchableKeywordsCount ++; - boolean titleMatch = false; - boolean headingMatch = false; - IntList positionValues = positions[i].values(); for (int idx = 0; idx < positionValues.size(); idx++) { @@ -255,28 +252,26 @@ public class IndexResultScoreCalculator { firstPosition = Math.max(firstPosition, pos); } - if (spans.title.intersects(positionValues.iterator())) { - titleMatch = true; - weightedCounts[i] += 2.5f; - } - else if (spans.heading.intersects(positionValues.iterator())) { - headingMatch = true; - weightedCounts[i] += 2.5f; - } - else if (spans.code.intersects(positionValues.iterator())) - weightedCounts[i] += 0.25f; - else if (spans.anchor.intersects(positionValues.iterator())) - weightedCounts[i] += 0.2f; - else if (spans.nav.intersects(positionValues.iterator())) - weightedCounts[i] += 0.1f; - else - weightedCounts[i] += 1.0f; - - if (titleMatch) { + int cnt; + if ((cnt = spans.title.countIntersections(positionValues.iterator())) != 0) { unorderedMatchInTitleCount++; + weightedCounts[i] += 2.5f * cnt; } - if (headingMatch) { + if ((cnt = spans.heading.countIntersections(positionValues.iterator())) != 0) { unorderedMatchInHeadingCount++; + weightedCounts[i] += 2.5f * cnt; + } + if ((cnt = spans.code.countIntersections(positionValues.iterator())) != 0) { + weightedCounts[i] += 0.25f * cnt; + } + if ((cnt = spans.anchor.countIntersections(positionValues.iterator())) != 0) { + weightedCounts[i] += 0.2f * cnt; + } + if ((cnt = spans.nav.countIntersections(positionValues.iterator())) != 0) { + weightedCounts[i] += 0.1f * cnt; + } + if ((cnt = spans.body.countIntersections(positionValues.iterator())) != 0) { + weightedCounts[i] += 1.0f * cnt; } } }