-
Notifications
You must be signed in to change notification settings - Fork 25.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
TSDB: Change
_tsid
field to SortedDocValuesField (#83045)
Since _tsid cannot be a multi-value field, this PR modifies the TimeSeriesIdFieldMapper so that _tsid is added as a SortedDocValuesField (instead of a SortedSetDocValuesField) Relates to #80276
- Loading branch information
Showing
5 changed files
with
119 additions
and
15 deletions.
There are no files selected for viewing
105 changes: 105 additions & 0 deletions
105
...r/src/main/java/org/elasticsearch/index/fielddata/plain/SortedOrdinalsIndexFieldData.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0 and the Server Side Public License, v 1; you may not use this file except | ||
* in compliance with, at your election, the Elastic License 2.0 or the Server | ||
* Side Public License, v 1. | ||
*/ | ||
|
||
package org.elasticsearch.index.fielddata.plain; | ||
|
||
import org.apache.lucene.index.LeafReaderContext; | ||
import org.apache.lucene.index.OrdinalMap; | ||
import org.apache.lucene.index.SortedSetDocValues; | ||
import org.apache.lucene.search.SortField; | ||
import org.apache.lucene.search.SortedSetSortField; | ||
import org.elasticsearch.common.util.BigArrays; | ||
import org.elasticsearch.core.Nullable; | ||
import org.elasticsearch.index.fielddata.IndexFieldData; | ||
import org.elasticsearch.index.fielddata.IndexFieldData.XFieldComparatorSource.Nested; | ||
import org.elasticsearch.index.fielddata.IndexFieldDataCache; | ||
import org.elasticsearch.index.fielddata.LeafOrdinalsFieldData; | ||
import org.elasticsearch.indices.breaker.CircuitBreakerService; | ||
import org.elasticsearch.script.field.ToScriptField; | ||
import org.elasticsearch.search.DocValueFormat; | ||
import org.elasticsearch.search.MultiValueMode; | ||
import org.elasticsearch.search.aggregations.support.ValuesSourceType; | ||
import org.elasticsearch.search.sort.BucketedSort; | ||
import org.elasticsearch.search.sort.SortOrder; | ||
|
||
import static org.elasticsearch.index.fielddata.IndexFieldData.XFieldComparatorSource.sortMissingLast; | ||
|
||
public class SortedOrdinalsIndexFieldData extends AbstractIndexOrdinalsFieldData { | ||
|
||
public static class Builder implements IndexFieldData.Builder { | ||
private final String name; | ||
private final ToScriptField<SortedSetDocValues> toScriptField; | ||
private final ValuesSourceType valuesSourceType; | ||
|
||
public Builder(String name, ValuesSourceType valuesSourceType, ToScriptField<SortedSetDocValues> toScriptField) { | ||
this.name = name; | ||
this.toScriptField = toScriptField; | ||
this.valuesSourceType = valuesSourceType; | ||
} | ||
|
||
@Override | ||
public SortedOrdinalsIndexFieldData build(IndexFieldDataCache cache, CircuitBreakerService breakerService) { | ||
return new SortedOrdinalsIndexFieldData(cache, name, valuesSourceType, breakerService, toScriptField); | ||
} | ||
} | ||
|
||
public SortedOrdinalsIndexFieldData( | ||
IndexFieldDataCache cache, | ||
String fieldName, | ||
ValuesSourceType valuesSourceType, | ||
CircuitBreakerService breakerService, | ||
ToScriptField<SortedSetDocValues> toScriptField | ||
) { | ||
super(fieldName, valuesSourceType, cache, breakerService, toScriptField); | ||
} | ||
|
||
@Override | ||
public SortField sortField(@Nullable Object missingValue, MultiValueMode sortMode, Nested nested, boolean reverse) { | ||
SortField sortField = new SortField(getFieldName(), SortField.Type.STRING, reverse); | ||
sortField.setMissingValue( | ||
sortMissingLast(missingValue) ^ reverse ? SortedSetSortField.STRING_LAST : SortedSetSortField.STRING_FIRST | ||
); | ||
return sortField; | ||
} | ||
|
||
@Override | ||
public BucketedSort newBucketedSort( | ||
BigArrays bigArrays, | ||
Object missingValue, | ||
MultiValueMode sortMode, | ||
Nested nested, | ||
SortOrder sortOrder, | ||
DocValueFormat format, | ||
int bucketSize, | ||
BucketedSort.ExtraData extra | ||
) { | ||
throw new IllegalArgumentException("only supported on numeric fields"); | ||
} | ||
|
||
@Override | ||
public LeafOrdinalsFieldData load(LeafReaderContext context) { | ||
// Doc value fields are loaded using Lucene's DocValues#getSortedSet | ||
// that can happily load SortedDocValues as well. | ||
return new SortedSetBytesLeafFieldData(context.reader(), getFieldName(), toScriptField); | ||
} | ||
|
||
@Override | ||
public LeafOrdinalsFieldData loadDirect(LeafReaderContext context) { | ||
return load(context); | ||
} | ||
|
||
@Override | ||
public OrdinalMap getOrdinalMap() { | ||
return null; | ||
} | ||
|
||
@Override | ||
public boolean supportsGlobalOrdinalsMapping() { | ||
return true; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters