diff --git a/src/main/java/it/cavallium/dbengine/client/LuceneIndexImpl.java b/src/main/java/it/cavallium/dbengine/client/LuceneIndexImpl.java index a9d82af..b242a9b 100644 --- a/src/main/java/it/cavallium/dbengine/client/LuceneIndexImpl.java +++ b/src/main/java/it/cavallium/dbengine/client/LuceneIndexImpl.java @@ -86,7 +86,7 @@ public class LuceneIndexImpl implements LuceneIndex { private Mono> transformLuceneResultWithTransformer(LLSearchResultShard llSearchResult) { return Mono.just(new SearchResultKeys<>(llSearchResult.results() - .map(signal -> new SearchResultKey<>(signal.key().map(indicizer::getKey), signal.score())), + .map(signal -> new SearchResultKey<>(Mono.fromCallable(signal::key).map(indicizer::getKey), signal.score())), llSearchResult.totalHitsCount(), llSearchResult.release() )); @@ -95,7 +95,7 @@ public class LuceneIndexImpl implements LuceneIndex { private Mono> transformLuceneResultWithValues(LLSearchResultShard llSearchResult, ValueGetter valueGetter) { return Mono.fromCallable(() -> new SearchResult<>(llSearchResult.results().map(signal -> { - var key = signal.key().map(indicizer::getKey); + var key = Mono.fromCallable(signal::key).map(indicizer::getKey); return new SearchResultItem<>(key, key.flatMap(valueGetter::get), signal.score()); }), llSearchResult.totalHitsCount(), llSearchResult.release())); } @@ -104,7 +104,11 @@ public class LuceneIndexImpl implements LuceneIndex { ValueTransformer valueTransformer) { var scoresWithKeysFlux = llSearchResult .results() - .flatMapSequential(signal -> signal.key().map(indicizer::getKey).map(key -> Tuples.of(signal.score(), key))); + .flatMapSequential(signal -> Mono + .fromCallable(signal::key) + .map(indicizer::getKey) + .map(key -> Tuples.of(signal.score(), key)) + ); var resultItemsFlux = valueTransformer .transform(scoresWithKeysFlux) .filter(tuple3 -> tuple3.getT3().isPresent()) diff --git a/src/main/java/it/cavallium/dbengine/database/LLKeyScore.java b/src/main/java/it/cavallium/dbengine/database/LLKeyScore.java index 0c0d28e..770c11d 100644 --- a/src/main/java/it/cavallium/dbengine/database/LLKeyScore.java +++ b/src/main/java/it/cavallium/dbengine/database/LLKeyScore.java @@ -2,32 +2,7 @@ package it.cavallium.dbengine.database; import java.util.Objects; import java.util.StringJoiner; +import org.jetbrains.annotations.Nullable; import reactor.core.publisher.Mono; -public record LLKeyScore(int docId, float score, Mono key) { - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - LLKeyScore that = (LLKeyScore) o; - return docId == that.docId && Float.compare(that.score, score) == 0; - } - - @Override - public int hashCode() { - return Objects.hash(docId, score); - } - - @Override - public String toString() { - return new StringJoiner(", ", LLKeyScore.class.getSimpleName() + "[", "]") - .add("docId=" + docId) - .add("score=" + score) - .toString(); - } -} +public record LLKeyScore(int docId, float score, @Nullable String key) {} diff --git a/src/main/java/it/cavallium/dbengine/lucene/LuceneUtils.java b/src/main/java/it/cavallium/dbengine/lucene/LuceneUtils.java index fd06fd4..123ad78 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/LuceneUtils.java +++ b/src/main/java/it/cavallium/dbengine/lucene/LuceneUtils.java @@ -370,7 +370,7 @@ public class LuceneUtils { .map(hit -> { var result = mapHitBlocking(hit, indexSearchers, keyFieldName); // The "else" value is an errored key score, to filter out next - return Objects.requireNonNullElseGet(result, () -> new LLKeyScore(-1, -1, Mono.empty())); + return Objects.requireNonNullElseGet(result, () -> new LLKeyScore(-1, -1, null)); }) .sequential() // Filter out the errored key scores @@ -389,12 +389,13 @@ public class LuceneUtils { var indexSearcher = indexSearchers.shard(shardIndex); try { String collectedDoc = keyOfTopDoc(shardDocId, indexSearcher.getIndexReader(), keyFieldName); - return new LLKeyScore(shardDocId, score, Mono.just(collectedDoc)); + return new LLKeyScore(shardDocId, score, collectedDoc); } catch (NoSuchElementException ex) { - logger.debug("Error: document " + shardDocId + " key is not present!"); + logger.debug("Error: document {} key is not present!", shardDocId); return null; } catch (Exception ex) { - return new LLKeyScore(shardDocId, score, Mono.error(ex)); + logger.error("Failed to read document {}", shardDocId, ex); + return new LLKeyScore(shardDocId, score, null); } }