Skip to content

Commit b036621

Browse files
committed
[wip]Bump elasticsearch from 7.9.3 to 7.16.3
1 parent a38556d commit b036621

File tree

6 files changed

+112
-56
lines changed

6 files changed

+112
-56
lines changed

pom.xml

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>org.codelibs</groupId>
66
<artifactId>elasticsearch-dynarank</artifactId>
7-
<version>7.9.0-SNAPSHOT</version>
7+
<version>7.16.0-SNAPSHOT</version>
88
<packaging>jar</packaging>
99
<description>This plugin re-orders top N documents in a search results.</description>
1010
<inceptionYear>2011</inceptionYear>
@@ -27,7 +27,7 @@
2727
<version>9</version>
2828
</parent>
2929
<properties>
30-
<elasticsearch.version>7.9.3</elasticsearch.version>
30+
<elasticsearch.version>7.16.3</elasticsearch.version>
3131
<elasticsearch.plugin.classname>org.codelibs.elasticsearch.dynarank.DynamicRankingPlugin</elasticsearch.plugin.classname>
3232
<maven.compiler.source>1.8</maven.compiler.source>
3333
<maven.compiler.target>1.8</maven.compiler.target>
@@ -95,6 +95,23 @@
9595
</plugin>
9696
</plugins>
9797
</build>
98+
<repositories>
99+
<repository>
100+
<id>central</id>
101+
<url>https://repo1.maven.org/maven2/</url>
102+
<releases>
103+
<enabled>true</enabled>
104+
</releases>
105+
<snapshots>
106+
<enabled>true</enabled>
107+
</snapshots>
108+
</repository>
109+
<repository>
110+
<id>codelibs.org</id>
111+
<name>CodeLibs Repository</name>
112+
<url>https://maven.codelibs.org</url>
113+
</repository>
114+
</repositories>
98115
<dependencies>
99116
<dependency>
100117
<groupId>org.elasticsearch</groupId>
@@ -139,7 +156,7 @@
139156
<dependency>
140157
<groupId>org.codelibs</groupId>
141158
<artifactId>elasticsearch-minhash</artifactId>
142-
<version>7.9.0</version>
159+
<version>7.16.0</version>
143160
<scope>test</scope>
144161
</dependency>
145162
<dependency>

src/main/java/org/codelibs/elasticsearch/dynarank/ranker/DynamicRanker.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.Map;
1010
import java.util.concurrent.TimeUnit;
1111
import java.util.function.Function;
12+
import java.util.Objects;
1213

1314
import org.apache.logging.log4j.LogManager;
1415
import org.apache.logging.log4j.Logger;
@@ -28,6 +29,7 @@
2829
import org.elasticsearch.client.Client;
2930
import org.elasticsearch.cluster.metadata.IndexAbstraction;
3031
import org.elasticsearch.cluster.metadata.IndexMetadata;
32+
import org.elasticsearch.cluster.metadata.MappingMetadata;
3133
import org.elasticsearch.cluster.metadata.Metadata;
3234
import org.elasticsearch.cluster.service.ClusterService;
3335
import org.elasticsearch.common.component.AbstractLifecycleComponent;
@@ -39,8 +41,8 @@
3941
import org.elasticsearch.common.settings.Setting;
4042
import org.elasticsearch.common.settings.Setting.Property;
4143
import org.elasticsearch.common.settings.Settings;
42-
import org.elasticsearch.common.unit.TimeValue;
4344
import org.elasticsearch.common.util.concurrent.ThreadContext;
45+
import org.elasticsearch.core.TimeValue;
4446
import org.elasticsearch.script.Script;
4547
import org.elasticsearch.script.ScriptService;
4648
import org.elasticsearch.script.ScriptType;
@@ -49,7 +51,7 @@
4951
import org.elasticsearch.search.aggregations.InternalAggregations;
5052
import org.elasticsearch.search.builder.SearchSourceBuilder;
5153
import org.elasticsearch.search.internal.InternalSearchResponse;
52-
import org.elasticsearch.search.profile.SearchProfileShardResults;
54+
import org.elasticsearch.search.profile.SearchProfileResults;
5355
import org.elasticsearch.search.suggest.Suggest;
5456
import org.elasticsearch.threadpool.ThreadPool;
5557

@@ -254,11 +256,15 @@ public ScriptInfo getScriptInfo(final String index) {
254256
return ScriptInfo.NO_SCRIPT_INFO;
255257
}
256258

257-
final ScriptInfo[] scriptInfos = indexAbstraction.getIndices().stream().map(md -> md.getSettings())
258-
.filter(s -> SETTING_INDEX_DYNARANK_LANG.get(s).length() > 0)
259-
.map(settings -> new ScriptInfo(SETTING_INDEX_DYNARANK_SCRIPT.get(settings),
260-
SETTING_INDEX_DYNARANK_LANG.get(settings), SETTING_INDEX_DYNARANK_TYPE.get(settings),
261-
SETTING_INDEX_DYNARANK_PARAMS.get(settings), SETTING_INDEX_DYNARANK_REORDER_SIZE.get(settings), SETTING_INDEX_DYNARANK_KEEP_TOPN.get(settings)))
259+
final ScriptInfo[] scriptInfos = indexAbstraction.getIndices().stream()
260+
.map(metaData::index)
261+
.filter(idx -> SETTING_INDEX_DYNARANK_LANG.get(idx.getSettings()).length() > 0)
262+
.map(idx ->
263+
new ScriptInfo(SETTING_INDEX_DYNARANK_SCRIPT.get(idx.getSettings()), SETTING_INDEX_DYNARANK_LANG.get(idx.getSettings()),
264+
SETTING_INDEX_DYNARANK_TYPE.get(idx.getSettings()), SETTING_INDEX_DYNARANK_PARAMS.get(idx.getSettings()),
265+
SETTING_INDEX_DYNARANK_REORDER_SIZE.get(idx.getSettings()), SETTING_INDEX_DYNARANK_KEEP_TOPN.get(idx.getSettings()),
266+
idx.mapping())
267+
)
262268
.toArray(n -> new ScriptInfo[n]);
263269

264270
if (scriptInfos.length == 0) {
@@ -337,7 +343,7 @@ public void onResponse(final Response response) {
337343
final Suggest suggest = in.readBoolean() ? new Suggest(in) : null;
338344
final boolean timedOut = in.readBoolean();
339345
final Boolean terminatedEarly = in.readOptionalBoolean();
340-
final SearchProfileShardResults profileResults = in.readOptionalWriteable(SearchProfileShardResults::new);
346+
final SearchProfileResults profileResults = in.readOptionalWriteable(SearchProfileResults::new);
341347
final int numReducePhases = in.readVInt();
342348

343349
final SearchResponseSections internalResponse = new InternalSearchResponse(newHits, aggregations, suggest,
@@ -490,7 +496,7 @@ public static class ScriptInfo {
490496
// nothing
491497
}
492498

493-
ScriptInfo(final String script, final String lang, final String scriptType, final Settings settings, final int reorderSize,final int keepTopN) {
499+
ScriptInfo(final String script, final String lang, final String scriptType, final Settings settings, final int reorderSize, final int keepTopN, final MappingMetadata mappingMetadata) {
494500
this.script = script;
495501
this.lang = lang;
496502
this.reorderSize = reorderSize;
@@ -500,6 +506,7 @@ public static class ScriptInfo {
500506
final List<String> list = settings.getAsList(name);
501507
this.settings.put(name, list.toArray(new String[list.size()]));
502508
}
509+
this.settings.put("source_as_map", mappingMetadata.getSourceAsMap());
503510
if ("STORED".equalsIgnoreCase(scriptType)) {
504511
this.scriptType = ScriptType.STORED;
505512
} else {
@@ -577,7 +584,8 @@ public void run() {
577584

578585
final ScriptInfo scriptInfo = new ScriptInfo(script, SETTING_INDEX_DYNARANK_LANG.get(indexSettings),
579586
SETTING_INDEX_DYNARANK_TYPE.get(indexSettings), SETTING_INDEX_DYNARANK_PARAMS.get(indexSettings),
580-
SETTING_INDEX_DYNARANK_REORDER_SIZE.get(indexSettings), SETTING_INDEX_DYNARANK_KEEP_TOPN.get(indexSettings));
587+
SETTING_INDEX_DYNARANK_REORDER_SIZE.get(indexSettings), SETTING_INDEX_DYNARANK_KEEP_TOPN.get(indexSettings),
588+
indexMD.mapping());
581589
if (logger.isDebugEnabled()) {
582590
logger.debug("Reload cache for {} => {}", index, scriptInfo);
583591
}

src/main/java/org/codelibs/elasticsearch/dynarank/script/bucket/impl/StandardBucket.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@ public class StandardBucket implements Bucket {
1414

1515
private final float threshold;
1616

17-
public StandardBucket(final SearchHit hit, final Object hash, final float threshold) {
17+
private final boolean isMinhash;
18+
19+
public StandardBucket(final SearchHit hit, final Object hash, final float threshold, final boolean isMinhash) {
1820
this.hash = hash;
1921
this.threshold = threshold;
22+
this.isMinhash = isMinhash;
2023
queue.add(hit);
2124
}
2225

@@ -45,6 +48,9 @@ public boolean contains(final Object value) {
4548
}
4649

4750
if (value instanceof String) {
51+
if (isMinhash) {
52+
return MinHash.compare(hash.toString(), value.toString()) >= threshold;
53+
}
4854
return value.toString().equals(hash);
4955
} else if (value instanceof Number) {
5056
return Math.abs(((Number) value).doubleValue() - ((Number) hash).doubleValue()) < threshold;

src/main/java/org/codelibs/elasticsearch/dynarank/script/bucket/impl/StandardBucketFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ public Buckets createBucketList(final Map<String, Object> params) {
2323

2424
@Override
2525
public Bucket createBucket(final Object... args) {
26-
return new StandardBucket((SearchHit) args[0], args[1], (float) args[2]);
26+
return new StandardBucket((SearchHit) args[0], args[1], (float) args[2], (boolean) args[3]);
2727
}
2828
}

src/main/java/org/codelibs/elasticsearch/dynarank/script/bucket/impl/StandardBuckets.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.codelibs.elasticsearch.dynarank.script.bucket.impl;
22

33
import java.util.ArrayList;
4+
import java.util.Arrays;
45
import java.util.List;
56
import java.util.Map;
67

@@ -46,10 +47,15 @@ public SearchHit[] getHits(final SearchHit[] searchHits) {
4647
if (thresholds == null) {
4748
throw new ElasticsearchException("diversity_thresholds is null.");
4849
}
50+
final Object sourceAsMap = params.get("source_as_map");
4951
final float[] diversityThresholds = parseFloats(thresholds);
5052
final Object[][] ignoredObjGroups = new Object[diversityFields.length][];
53+
final String[] minhashFields = new String[diversityFields.length];
5154
for (int i = 0; i < diversityFields.length; i++) {
5255
ignoredObjGroups[i] = (String[]) params.get(diversityFields[i] + "_ignored_objects");
56+
if (isMinhashFields(sourceAsMap, diversityFields[i])) {
57+
minhashFields[i] = diversityFields[i];
58+
}
5359
}
5460

5561
if (logger.isDebugEnabled()) {
@@ -59,6 +65,7 @@ public SearchHit[] getHits(final SearchHit[] searchHits) {
5965
int minNumOfBuckets = Integer.MAX_VALUE;
6066
for (int i = diversityFields.length - 1; i >= 0; i--) {
6167
final String diversityField = diversityFields[i];
68+
final boolean isMinhash = Arrays.asList(minhashFields).contains(diversityField);
6269
final float diversityThreshold = diversityThresholds[i];
6370
final Object[] ignoredObjs = ignoredObjGroups[i];
6471
final List<Bucket> bucketList = new ArrayList<>();
@@ -75,7 +82,7 @@ public SearchHit[] getHits(final SearchHit[] searchHits) {
7582
if (ignoredObjs != null) {
7683
for (final Object ignoredObj : ignoredObjs) {
7784
if (ignoredObj.equals(value)) {
78-
bucketList.add(bucketFactory.createBucket(hit, value, diversityThreshold));
85+
bucketList.add(bucketFactory.createBucket(hit, value, diversityThreshold, isMinhash));
7986
insert = true;
8087
break;
8188
}
@@ -90,7 +97,7 @@ public SearchHit[] getHits(final SearchHit[] searchHits) {
9097
}
9198
}
9299
if (!insert) {
93-
bucketList.add(bucketFactory.createBucket(hit, value, diversityThreshold));
100+
bucketList.add(bucketFactory.createBucket(hit, value, diversityThreshold, isMinhash));
94101
}
95102
}
96103
}
@@ -226,4 +233,18 @@ protected SearchHit[] createHits(final int size, final List<Bucket> bucketList)
226233
return newSearchHits;
227234
}
228235

236+
@SuppressWarnings("unchecked")
237+
private boolean isMinhashFields(Object sourceAsMap, String field) {
238+
if (sourceAsMap instanceof Map) {
239+
Object propertiesMap = ((Map<String, Object>) sourceAsMap).get("properties");
240+
if (propertiesMap instanceof Map) {
241+
Object fieldMap = ((Map<String, Object>) propertiesMap).get(field);
242+
if (fieldMap instanceof Map) {
243+
Object fieldType = ((Map<String, Object>) fieldMap).get("type");
244+
return fieldType != null && fieldType.toString().equals("minhash");
245+
}
246+
}
247+
}
248+
return false;
249+
}
229250
}

0 commit comments

Comments
 (0)