Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9865ebb

Browse files
committed
optimizeTopK in view
1 parent 4dc204c commit 9865ebb

File tree

6 files changed

+54
-0
lines changed

6 files changed

+54
-0
lines changed

‎src/main/java/com/arangodb/entity/arangosearch/ArangoSearchProperties.java‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class ArangoSearchProperties {
4242
private final Collection<CollectionLink> links;
4343
private ArangoSearchCompression primarySortCompression;
4444
private final Collection<StoredValue> storedValues;
45+
private final Collection<String> optimizeTopK;
4546
private Boolean primarySortCache;
4647
private Boolean primaryKeyCache;
4748

@@ -50,6 +51,7 @@ public ArangoSearchProperties() {
5051
links = new ArrayList<>();
5152
primarySorts = new ArrayList<>();
5253
storedValues = new ArrayList<>();
54+
optimizeTopK = new ArrayList<>();
5355
}
5456

5557
public Long getCommitIntervalMsec() {
@@ -127,6 +129,18 @@ public void addStoredValues(final StoredValue... storedValues) {
127129
this.storedValues.addAll(Arrays.asList(storedValues));
128130
}
129131

132+
/**
133+
* @return An array of strings defining optimized sort expressions.
134+
* @since ArangoDB 3.11, Enterprise Edition only
135+
*/
136+
public Collection<String> getOptimizeTopK() {
137+
return optimizeTopK;
138+
}
139+
140+
public void addOptimizeTopK(final String... optimizeTopK) {
141+
this.optimizeTopK.addAll(Arrays.asList(optimizeTopK));
142+
}
143+
130144
public Boolean getPrimarySortCache() {
131145
return primarySortCache;
132146
}

‎src/main/java/com/arangodb/entity/arangosearch/ArangoSearchPropertiesEntity.java‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@ public Collection<StoredValue> getStoredValues() {
116116
return properties.getStoredValues();
117117
}
118118

119+
/**
120+
* @return An array of strings defining optimized sort expressions.
121+
* @since ArangoDB 3.11, Enterprise Edition only
122+
*/
123+
public Collection<String> getOptimizeTopK() {
124+
return properties.getOptimizeTopK();
125+
}
126+
119127
/**
120128
* @return If you enable this option, then the primary sort columns are always cached in memory. This can improve
121129
* the performance of queries that utilize the primary sort order. Otherwise, these values are memory-mapped and it

‎src/main/java/com/arangodb/internal/velocypack/VPackDeserializers.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,13 @@ public class VPackDeserializers {
276276
properties.addStoredValues(sv);
277277
}
278278

279+
final VPackSlice optimizeTopK = vpack.get("optimizeTopK");
280+
final Iterator<VPackSlice> optimizeTopKIterator = optimizeTopK.arrayIterator();
281+
while (optimizeTopKIterator.hasNext()) {
282+
String o = context.deserialize(optimizeTopKIterator.next(), String.class);
283+
properties.addOptimizeTopK(o);
284+
}
285+
279286
return properties;
280287
};
281288

‎src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,15 @@ public class VPackSerializers {
239239
builder.close(); // close array
240240
}
241241

242+
final Collection<String> optimizeTopK = value.getOptimizeTopK();
243+
if (!optimizeTopK.isEmpty()) {
244+
builder.add("optimizeTopK", ValueType.ARRAY); // open array
245+
for (final String o : optimizeTopK) {
246+
context.serialize(builder, null, o);
247+
}
248+
builder.close(); // close array
249+
}
250+
242251
};
243252

244253
public static final VPackSerializer<SearchAliasProperties> SEARCH_ALIAS_PROPERTIES = (builder, attribute, value, context) -> {

‎src/main/java/com/arangodb/model/arangosearch/ArangoSearchCreateOptions.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,15 @@ public ArangoSearchCreateOptions storedValues(final StoredValue... storedValues)
134134
return this;
135135
}
136136

137+
/**
138+
* @param optimizeTopK An array of strings defining sort expressions that you want to optimize.
139+
* @return options
140+
* @since ArangoDB 3.11, Enterprise Edition only
141+
*/
142+
public ArangoSearchCreateOptions optimizeTopK(final String... optimizeTopK) {
143+
properties.addOptimizeTopK(optimizeTopK);
144+
return this;
145+
}
137146

138147
/**
139148
* @param primarySortCache If you enable this option, then the primary sort columns are always cached in memory.

‎src/test/java/com/arangodb/ArangoSearchTest.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -931,6 +931,8 @@ void arangoSearchOptions(ArangoDatabase db) {
931931
.primaryKeyCache(true);
932932
StoredValue storedValue = new StoredValue(Arrays.asList("a", "b"), ArangoSearchCompression.none, true);
933933
options.storedValues(storedValue);
934+
String[] optimizeTopK = new String[]{"BM25(@doc) DESC", "TFIDF(@doc) DESC"};
935+
options.optimizeTopK(optimizeTopK);
934936

935937
final ArangoSearch view = db.arangoSearch(viewName);
936938
view.create(options);
@@ -972,6 +974,11 @@ void arangoSearchOptions(ArangoDatabase db) {
972974
FieldLink nested = fieldLink.getNested().iterator().next();
973975
assertThat(nested.getName()).isEqualTo("f2");
974976
}
977+
978+
if (isEnterprise() && isAtLeastVersion(3, 11)) {
979+
assertThat(properties.getOptimizeTopK()).containsExactly(optimizeTopK);
980+
}
981+
975982
}
976983

977984
@ParameterizedTest(name = "{index}")

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /