From b3e3f2aca43874a865f017d4180814b7671a7ed0 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Sun, 14 Feb 2021 03:25:15 +0100 Subject: [PATCH] Keep score order --- .../cavallium/dbengine/client/LuceneIndex.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/it/cavallium/dbengine/client/LuceneIndex.java b/src/main/java/it/cavallium/dbengine/client/LuceneIndex.java index 0ef7586..08b94d4 100644 --- a/src/main/java/it/cavallium/dbengine/client/LuceneIndex.java +++ b/src/main/java/it/cavallium/dbengine/client/LuceneIndex.java @@ -80,16 +80,21 @@ public class LuceneIndex implements LLSnapshottable { private SearchResultKeys transformLuceneResult(LLSearchResult llSearchResult, @Nullable MultiSort> sort, + LLScoreMode scoreMode, @Nullable Integer limit) { var mappedKeys = llSearchResult .results() .map(flux -> flux.map(item -> new SearchResultKey<>(indicizer.getKey(item.getKey()), item.getScore()))); + if (scoreMode != LLScoreMode.COMPLETE_NO_SCORES && sort == null) { + sort = MultiSort.topScore(); + } var sortedKeys = LuceneUtils.mergeStream(mappedKeys, sort, limit); return new SearchResultKeys<>(llSearchResult.totalHitsCount(), sortedKeys); } private SearchResult transformLuceneResultWithValues(LLSearchResult llSearchResult, @Nullable MultiSort> sort, + LLScoreMode scoreMode, @Nullable Integer limit, ValueGetter valueGetter) { var mappedKeys = llSearchResult @@ -98,6 +103,9 @@ public class LuceneIndex implements LLSnapshottable { var key = indicizer.getKey(item.getKey()); return valueGetter.get(key).map(value -> new SearchResultItem<>(key, value, item.getScore())); })); + if (scoreMode != LLScoreMode.COMPLETE_NO_SCORES && sort == null) { + sort = MultiSort.topScoreWithValues(); + } var sortedKeys = LuceneUtils.mergeStream(mappedKeys, sort, limit); return new SearchResult<>(llSearchResult.totalHitsCount(), sortedKeys); } @@ -117,7 +125,7 @@ public class LuceneIndex implements LLSnapshottable { = indicizer.getMoreLikeThisDocumentFields(key, mltDocumentValue); return luceneIndex .moreLikeThis(resolveSnapshot(snapshot), mltDocumentFields, limit, indicizer.getKeyFieldName()) - .map(llSearchResult -> this.transformLuceneResult(llSearchResult, MultiSort.topScore(), limit)); + .map(llSearchResult -> this.transformLuceneResult(llSearchResult, null, LLScoreMode.TOP_SCORES, limit)); } @@ -138,7 +146,7 @@ public class LuceneIndex implements LLSnapshottable { return luceneIndex .moreLikeThis(resolveSnapshot(snapshot), mltDocumentFields, limit, indicizer.getKeyFieldName()) .map(llSearchResult -> - this.transformLuceneResultWithValues(llSearchResult, MultiSort.topScoreWithValues(), limit, valueGetter)); + this.transformLuceneResultWithValues(llSearchResult, null, LLScoreMode.TOP_SCORES, limit, valueGetter)); } /** @@ -156,7 +164,7 @@ public class LuceneIndex implements LLSnapshottable { LLSort querySort = sort != null ? sort.getQuerySort() : null; return luceneIndex .search(resolveSnapshot(snapshot), query, limit, querySort, scoreMode, indicizer.getKeyFieldName()) - .map(llSearchResult -> this.transformLuceneResult(llSearchResult, sort, limit)); + .map(llSearchResult -> this.transformLuceneResult(llSearchResult, sort, scoreMode, limit)); } /** @@ -175,7 +183,7 @@ public class LuceneIndex implements LLSnapshottable { LLSort querySort = sort != null ? sort.getQuerySort() : null; return luceneIndex .search(resolveSnapshot(snapshot), query, limit, querySort, scoreMode, indicizer.getKeyFieldName()) - .map(llSearchResult -> this.transformLuceneResultWithValues(llSearchResult, sort, limit, valueGetter)); + .map(llSearchResult -> this.transformLuceneResultWithValues(llSearchResult, sort, scoreMode, limit, valueGetter)); } public Mono count(@Nullable CompositeSnapshot snapshot, Query query) {