You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2023/01/06 14:01:37 UTC
[couchdb] 06/07: flatten TotalHits to two fields
This is an automated email from the ASF dual-hosted git repository.
rnewson pushed a commit to branch import-nouveau-reorg
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 36e076f14c01abc56375f6a7fb2f988c1c3a6020
Author: Robert Newson <rn...@apache.org>
AuthorDate: Fri Jan 6 12:27:45 2023 +0000
flatten TotalHits to two fields
---
.../apache/couchdb/nouveau/api/SearchResults.java | 21 ++++++++++++-----
.../couchdb/nouveau/core/lucene9/Lucene9Index.java | 3 ++-
src/nouveau/src/nouveau_fabric_search.erl | 26 +++++++++-------------
3 files changed, 27 insertions(+), 23 deletions(-)
diff --git a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/api/SearchResults.java b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/api/SearchResults.java
index cb4d7a40c..db23e9d29 100644
--- a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/api/SearchResults.java
+++ b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/api/SearchResults.java
@@ -16,19 +16,20 @@ package org.apache.couchdb.nouveau.api;
import java.util.List;
import java.util.Map;
+import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.dropwizard.jackson.JsonSnakeCase;
-import org.apache.couchdb.nouveau.l9x.lucene.search.TotalHits;
-
@JsonSnakeCase
public class SearchResults {
- @NotNull
- private TotalHits totalHits;
+ @Min(0)
+ private long totalHits;
+
+ private String totalHitsRelation;
@NotNull
private List<@NotNull SearchHit> hits;
@@ -40,15 +41,23 @@ public class SearchResults {
public SearchResults() {
}
- public void setTotalHits(final TotalHits totalHits) {
+ public void setTotalHits(final long totalHits) {
this.totalHits = totalHits;
}
@JsonProperty
- public TotalHits getTotalHits() {
+ public long getTotalHits() {
return totalHits;
}
+ public String getTotalHitsRelation() {
+ return totalHitsRelation;
+ }
+
+ public void setTotalHitsRelation(String totalHitsRelation) {
+ this.totalHitsRelation = totalHitsRelation;
+ }
+
public void setHits(final List<SearchHit> hits) {
this.hits = hits;
}
diff --git a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/core/lucene9/Lucene9Index.java b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/core/lucene9/Lucene9Index.java
index c17fe3a04..740c83cfe 100644
--- a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/core/lucene9/Lucene9Index.java
+++ b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/core/lucene9/Lucene9Index.java
@@ -218,7 +218,8 @@ class Lucene9Index extends Index {
hits.add(new SearchHit(doc.get("_id"), (FieldDoc) scoreDoc, fields));
}
- searchResults.setTotalHits(topDocs.totalHits);
+ searchResults.setTotalHits(topDocs.totalHits.value);
+ searchResults.setTotalHitsRelation(topDocs.totalHits.relation.name());
searchResults.setHits(hits);
}
diff --git a/src/nouveau/src/nouveau_fabric_search.erl b/src/nouveau/src/nouveau_fabric_search.erl
index 52eb0ac02..9dd5c8181 100644
--- a/src/nouveau/src/nouveau_fabric_search.erl
+++ b/src/nouveau/src/nouveau_fabric_search.erl
@@ -105,7 +105,10 @@ handle_message(Else, _Shard, _State) ->
merge_search_results(A, B, #state{} = State) ->
#{
<<"total_hits">> => merge_total_hits(
- maps:get(<<"total_hits">>, A, #{}), maps:get(<<"total_hits">>, B, #{})
+ maps:get(<<"total_hits">>, A, 0), maps:get(<<"total_hits">>, B, 0)
+ ),
+ <<"total_hits_relation">> => merge_total_hits_relation(
+ maps:get(<<"total_hits_relation">>, A, null), maps:get(<<"total_hits_relation">>, B, null)
),
<<"hits">> => merge_hits(
maps:get(<<"hits">>, A, []),
@@ -122,21 +125,12 @@ merge_search_results(A, B, #state{} = State) ->
}.
merge_total_hits(TotalHitsA, TotalHitsB) ->
- ValueA = maps:get(<<"value">>, TotalHitsA, 0),
- ValueB = maps:get(<<"value">>, TotalHitsB, 0),
- RelationA = maps:get(<<"relation">>, TotalHitsA, <<"EQUAL_TO">>),
- RelationB = maps:get(<<"relation">>, TotalHitsB, <<"EQUAL_TO">>),
- MergedValue = ValueA + ValueB,
- MergedRelation =
- if
- RelationA == <<"GREATER_THAN_OR_EQUAL_TO">> ->
- <<"GREATER_THAN_OR_EQUAL_TO">>;
- RelationB == <<"GREATER_THAN_OR_EQUAL_TO">> ->
- <<"GREATER_THAN_OR_EQUAL_TO">>;
- true ->
- <<"EQUAL_TO">>
- end,
- #{<<"value">> => MergedValue, <<"relation">> => MergedRelation}.
+ TotalHitsA + TotalHitsB.
+
+merge_total_hits_relation(A, B) when A == <<"GREATER_THAN_OR_EQUAL_TO">>; B == <<"GREATER_THAN_OR_EQUAL_TO">> ->
+ <<"GREATER_THAN_OR_EQUAL_TO">>;
+merge_total_hits_relation(A, B) when A == <<"EQUAL_TO">>; B == <<"EQUAL_TO">> ->
+ <<"EQUAL_TO">>.
merge_hits(HitsA, HitsB, Sort, Limit) ->
MergedHits = lists:merge(merge_fun(Sort), HitsA, HitsB),