Skip to content

Commit 9248b29

Browse files
jed326Jay Deng
authored andcommitted
Use cached SourceLookup for FieldScript
Signed-off-by: Jay Deng <[email protected]>
1 parent d3eb8fe commit 9248b29

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

server/src/main/java/org/opensearch/search/lookup/SearchLookup.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.util.LinkedHashSet;
4343
import java.util.Objects;
4444
import java.util.Set;
45+
import java.util.concurrent.ConcurrentHashMap;
4546
import java.util.function.BiFunction;
4647
import java.util.function.Supplier;
4748

@@ -77,10 +78,10 @@ public class SearchLookup {
7778
*/
7879
private final Set<String> fieldChain;
7980
private final DocLookup docMap;
80-
private final SourceLookup sourceLookup;
8181
private final FieldsLookup fieldsLookup;
8282
private final BiFunction<MappedFieldType, Supplier<SearchLookup>, IndexFieldData<?>> fieldDataLookup;
8383
private final int shardId;
84+
private final ConcurrentHashMap<Long, SourceLookup> sourceLookupMap = new ConcurrentHashMap<>();
8485

8586
/**
8687
* Constructor for backwards compatibility. Use the one with explicit shardId argument.
@@ -107,7 +108,6 @@ public SearchLookup(
107108
mapperService,
108109
fieldType -> fieldDataLookup.apply(fieldType, () -> forkAndTrackFieldReferences(fieldType.name()))
109110
);
110-
sourceLookup = new SourceLookup();
111111
fieldsLookup = new FieldsLookup(mapperService);
112112
this.fieldDataLookup = fieldDataLookup;
113113
this.shardId = shardId;
@@ -126,7 +126,6 @@ private SearchLookup(SearchLookup searchLookup, Set<String> fieldChain) {
126126
searchLookup.docMap.mapperService(),
127127
fieldType -> searchLookup.fieldDataLookup.apply(fieldType, () -> forkAndTrackFieldReferences(fieldType.name()))
128128
);
129-
this.sourceLookup = searchLookup.sourceLookup;
130129
this.fieldsLookup = searchLookup.fieldsLookup;
131130
this.fieldDataLookup = searchLookup.fieldDataLookup;
132131
this.shardId = searchLookup.shardId;
@@ -160,7 +159,7 @@ public LeafSearchLookup getLeafSearchLookup(LeafReaderContext context) {
160159
return new LeafSearchLookup(
161160
context,
162161
docMap.getLeafDocLookup(context),
163-
new SourceLookup(),
162+
sourceLookupMap.computeIfAbsent(Thread.currentThread().threadId(), K -> new SourceLookup()),
164163
fieldsLookup.getLeafFieldsLookup(context)
165164
);
166165
}
@@ -173,7 +172,7 @@ public DocLookup doc() {
173172
* Returned SourceLookup will be unrelated to any created LeafSearchLookups. Instead, use {@link LeafSearchLookup#source()} to access the related {@link SearchLookup}.
174173
*/
175174
public SourceLookup source() {
176-
return sourceLookup;
175+
return sourceLookupMap.computeIfAbsent(Thread.currentThread().threadId(), K -> new SourceLookup());
177176
}
178177

179178
public int shardId() {

0 commit comments

Comments
 (0)