Skip to content

Commit e332e74

Browse files
committed
Ngram sortings
1 parent 69cef8d commit e332e74

14 files changed

+196
-28
lines changed

api/src/main/java/io/kafbat/ui/config/ClustersProperties.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ public static class CacheProperties {
237237
public static class NgramProperties {
238238
int ngramMin = 1;
239239
int ngramMax = 4;
240+
boolean distanceScore = true;
240241
}
241242

242243
@Data
@@ -245,10 +246,10 @@ public static class NgramProperties {
245246
public static class ClusterFtsProperties {
246247
boolean enabled = true;
247248
boolean defaultEnabled = false;
248-
NgramProperties schemas = new NgramProperties(1, 4);
249-
NgramProperties consumers = new NgramProperties(1, 4);
250-
NgramProperties connect = new NgramProperties(1, 4);
251-
NgramProperties acl = new NgramProperties(1, 4);
249+
NgramProperties schemas = new NgramProperties(1, 4, true);
250+
NgramProperties consumers = new NgramProperties(1, 4, true);
251+
NgramProperties connect = new NgramProperties(1, 4, true);
252+
NgramProperties acl = new NgramProperties(1, 4, true);
252253

253254
public boolean use(Boolean request) {
254255
if (enabled) {

api/src/main/java/io/kafbat/ui/controller/KafkaConnectController.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import io.kafbat.ui.service.mcp.McpTool;
2424
import java.util.Comparator;
2525
import java.util.Map;
26+
import java.util.Optional;
2627
import java.util.Set;
2728
import javax.validation.Valid;
2829
import lombok.RequiredArgsConstructor;
@@ -137,15 +138,18 @@ public Mono<ResponseEntity<Flux<FullConnectorInfoDTO>>> getAllConnectors(
137138
.operationName("getAllConnectors")
138139
.build();
139140

141+
var maybeComparator = Optional.ofNullable(orderBy).map(this::getConnectorsComparator);
142+
140143
var comparator = sortOrder == null || sortOrder.equals(SortOrderDTO.ASC)
141-
? getConnectorsComparator(orderBy)
142-
: getConnectorsComparator(orderBy).reversed();
144+
? maybeComparator
145+
: maybeComparator.map(Comparator::reversed);
146+
147+
Flux<FullConnectorInfoDTO> connectors = kafkaConnectService.getAllConnectors(getCluster(clusterName), search, fts)
148+
.filterWhen(dto -> accessControlService.isConnectAccessible(dto.getConnect(), clusterName));
143149

144-
Flux<FullConnectorInfoDTO> job = kafkaConnectService.getAllConnectors(getCluster(clusterName), search, fts)
145-
.filterWhen(dto -> accessControlService.isConnectAccessible(dto.getConnect(), clusterName))
146-
.sort(comparator);
150+
Flux<FullConnectorInfoDTO> sorted = comparator.map(connectors::sort).orElse(connectors);
147151

148-
return Mono.just(ResponseEntity.ok(job))
152+
return Mono.just(ResponseEntity.ok(sorted))
149153
.doOnEach(sig -> audit(context, sig));
150154
}
151155

@@ -280,9 +284,7 @@ private Comparator<FullConnectorInfoDTO> getConnectorsComparator(ConnectorColumn
280284
FullConnectorInfoDTO::getName,
281285
Comparator.nullsFirst(Comparator.naturalOrder())
282286
);
283-
if (orderBy == null) {
284-
return defaultComparator;
285-
}
287+
286288
return switch (orderBy) {
287289
case CONNECT -> Comparator.comparing(
288290
FullConnectorInfoDTO::getConnect,

api/src/main/java/io/kafbat/ui/controller/SchemasController.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.Comparator;
2626
import java.util.List;
2727
import java.util.Map;
28+
import java.util.Optional;
2829
import javax.validation.Valid;
2930
import lombok.RequiredArgsConstructor;
3031
import lombok.extern.slf4j.Slf4j;
@@ -244,10 +245,10 @@ public Mono<ResponseEntity<SchemaSubjectsResponseDTO>> getSchemas(String cluster
244245

245246
List<String> subjectsToRetrieve;
246247
boolean paginate = true;
247-
var schemaComparator = getComparatorForSchema(orderBy);
248-
final Comparator<SubjectWithCompatibilityLevel> comparator =
248+
var schemaComparator = Optional.ofNullable(orderBy).map(this::getComparatorForSchema);
249+
final Optional<Comparator<SubjectWithCompatibilityLevel>> comparator =
249250
sortOrder == null || !sortOrder.equals(SortOrderDTO.DESC)
250-
? schemaComparator : schemaComparator.reversed();
251+
? schemaComparator : schemaComparator.map(Comparator::reversed);
251252
if (orderBy == null || SchemaColumnsToSortDTO.SUBJECT.equals(orderBy)) {
252253
if (SortOrderDTO.DESC.equals(sortOrder)) {
253254
filteredSubjects.sort(Comparator.nullsFirst(Comparator.reverseOrder()));
@@ -274,11 +275,13 @@ public Mono<ResponseEntity<SchemaSubjectsResponseDTO>> getSchemas(String cluster
274275

275276
private List<SubjectWithCompatibilityLevel> paginateSchemas(
276277
List<SubjectWithCompatibilityLevel> subjects,
277-
Comparator<SubjectWithCompatibilityLevel> comparator,
278+
Optional<Comparator<SubjectWithCompatibilityLevel>> comparator,
278279
boolean paginate,
279280
int pageSize,
280281
int subjectToSkip) {
281-
subjects.sort(comparator);
282+
283+
comparator.ifPresent(subjects::sort);
284+
282285
if (paginate) {
283286
return subjects.subList(subjectToSkip, Math.min(subjectToSkip + pageSize, subjects.size()));
284287
} else {

api/src/main/java/io/kafbat/ui/service/index/AclBindingNgramFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class AclBindingNgramFilter extends NgramFilter<AclBinding> {
1111
private final List<Tuple2<List<String>, AclBinding>> bindings;
1212

1313
public AclBindingNgramFilter(Collection<AclBinding> bindings) {
14-
this(bindings, true, new ClustersProperties.NgramProperties(1, 4));
14+
this(bindings, true, new ClustersProperties.NgramProperties(1, 4, true));
1515
}
1616

1717
public AclBindingNgramFilter(

api/src/main/java/io/kafbat/ui/service/index/ConsumerGroupFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class ConsumerGroupFilter extends NgramFilter<ConsumerGroupListing> {
1111
private final List<Tuple2<List<String>, ConsumerGroupListing>> groups;
1212

1313
public ConsumerGroupFilter(Collection<ConsumerGroupListing> groups) {
14-
this(groups, true, new ClustersProperties.NgramProperties(1, 4));
14+
this(groups, true, new ClustersProperties.NgramProperties(1, 4, true));
1515
}
1616

1717
public ConsumerGroupFilter(

api/src/main/java/io/kafbat/ui/service/index/KafkaConnectNgramFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class KafkaConnectNgramFilter extends NgramFilter<FullConnectorInfoDTO> {
1111
private final List<Tuple2<List<String>, FullConnectorInfoDTO>> connectors;
1212

1313
public KafkaConnectNgramFilter(Collection<FullConnectorInfoDTO> connectors) {
14-
this(connectors, true, new ClustersProperties.NgramProperties(1, 4));
14+
this(connectors, true, new ClustersProperties.NgramProperties(1, 4, true));
1515
}
1616

1717
public KafkaConnectNgramFilter(

api/src/main/java/io/kafbat/ui/service/index/NgramFilter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ public abstract class NgramFilter<T> {
2727
private final boolean enabled;
2828
private final boolean distanceScore;
2929

30-
public NgramFilter(ClustersProperties.NgramProperties properties, boolean enabled, boolean distanceScore) {
30+
public NgramFilter(ClustersProperties.NgramProperties properties, boolean enabled) {
3131
this.enabled = enabled;
32-
this.distanceScore = distanceScore;
32+
this.distanceScore = properties.isDistanceScore();
3333
this.analyzer = new ShortWordNGramAnalyzer(properties.getNgramMin(), properties.getNgramMax(), false);
3434
}
3535

@@ -75,6 +75,7 @@ public List<T> find(String search, Comparator<T> comparator) {
7575
score = cosineSimilarity(queryFreq, itemTokens);
7676
}
7777
result.add(new SearchResult<>(item.getT2(), score));
78+
break;
7879
}
7980
}
8081
}

api/src/main/java/io/kafbat/ui/service/index/SchemasFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public SchemasFilter(Collection<String> subjects, boolean enabled, ClustersPrope
1616

1717
@Override
1818
public List<String> find(String search) {
19-
return super.find(search, String::compareTo);
19+
return super.find(search, null);
2020
}
2121

2222
@Override

api/src/main/java/io/kafbat/ui/service/index/lucene/NameDistanceScoringFunction.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,15 @@ public int hashCode() {
9393

9494
@Override
9595
public boolean equals(Object obj) {
96-
if (this == obj) return true;
97-
if (obj == null || getClass() != obj.getClass()) return false;
96+
if (this == obj) {
97+
return true;
98+
}
99+
if (obj == null || getClass() != obj.getClass()) {
100+
return false;
101+
}
98102
NameDistanceScoringFunction that = (NameDistanceScoringFunction) obj;
99-
return java.util.Objects.equals(fieldName, that.fieldName) &&
100-
java.util.Objects.equals(prefixes, that.prefixes);
103+
return java.util.Objects.equals(fieldName, that.fieldName)
104+
&& java.util.Objects.equals(prefixes, that.prefixes);
101105
}
102106

103107
@Override

api/src/test/java/io/kafbat/ui/service/index/AbstractNgramFilterTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Comparator;
77
import java.util.List;
88
import java.util.Map;
9+
import org.junit.jupiter.api.Test;
910
import org.junit.jupiter.params.ParameterizedTest;
1011
import org.junit.jupiter.params.provider.ValueSource;
1112

@@ -30,6 +31,16 @@ void testFind(boolean enabled) {
3031
assertThat(resultNoCompare).isNotEmpty().contains(example.getValue());
3132
}
3233

34+
@Test
35+
public void testOrder() {
36+
List<T> items = sortedItems();
37+
NgramFilter<T> filter = buildFilter(items, true, ngramProperties);
38+
List<T> result = filter.find(sortedExample(items));
39+
assertThat(result).isEqualTo(sortedResult(items));
40+
}
41+
42+
43+
3344
protected abstract NgramFilter<T> buildFilter(List<T> items,
3445
boolean enabled,
3546
ClustersProperties.NgramProperties ngramProperties);
@@ -39,4 +50,10 @@ protected abstract NgramFilter<T> buildFilter(List<T> items,
3950
protected abstract Comparator<T> comparator();
4051

4152
protected abstract Map.Entry<String, T> example(List<T> items);
53+
54+
protected abstract List<T> sortedItems();
55+
56+
protected abstract String sortedExample(List<T> items);
57+
58+
protected abstract List<T> sortedResult(List<T> items);
4259
}

0 commit comments

Comments
 (0)