mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-28 01:22:26 -04:00
Update Text class to use native java ByteBuffer (#127666)
This PR is a precursor to #126492. It does three things: - Move org.elasticsearch.common.text.Text from :server to org.elasticsearch.xcontent.Text in :libs:x-content. - Refactor the Text class to use a java-native ByteBuffer instead of the elasticsearch BytesReference. - Add the XContentString interface, with the Text class implementing that interface.
This commit is contained in:
parent
7713ba1a7e
commit
db0c3c7a28
39 changed files with 132 additions and 71 deletions
|
@ -6,22 +6,17 @@
|
|||
* your election, the "Elastic License 2.0", the "GNU Affero General Public
|
||||
* License v3.0 only", or the "Server Side Public License, v 1".
|
||||
*/
|
||||
package org.elasticsearch.common.text;
|
||||
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.elasticsearch.common.bytes.BytesArray;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.xcontent.ToXContentFragment;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
package org.elasticsearch.xcontent;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* Both {@link String} and {@link BytesReference} representation of the text. Starts with one of those, and if
|
||||
* Both {@link String} and {@link ByteBuffer} representation of the text. Starts with one of those, and if
|
||||
* the other is requests, caches the other one in a local reference so no additional conversion will be needed.
|
||||
*/
|
||||
public final class Text implements Comparable<Text>, ToXContentFragment {
|
||||
public final class Text implements XContentString, Comparable<Text>, ToXContentFragment {
|
||||
|
||||
public static final Text[] EMPTY_ARRAY = new Text[0];
|
||||
|
||||
|
@ -36,31 +31,43 @@ public final class Text implements Comparable<Text>, ToXContentFragment {
|
|||
return texts;
|
||||
}
|
||||
|
||||
private BytesReference bytes;
|
||||
private ByteBuffer bytes;
|
||||
private String text;
|
||||
private int hash;
|
||||
private int stringLength = -1;
|
||||
|
||||
public Text(BytesReference bytes) {
|
||||
/**
|
||||
* Construct a Text from a UTF-8 encoded ByteBuffer. Since no string length is specified, {@link #stringLength()}
|
||||
* will perform a string conversion to measure the string length.
|
||||
*/
|
||||
public Text(ByteBuffer bytes) {
|
||||
this.bytes = bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a Text from a UTF-8 encoded ByteBuffer and an explicit string length. Used to avoid string conversion
|
||||
* in {@link #stringLength()}.
|
||||
*/
|
||||
public Text(ByteBuffer bytes, int stringLength) {
|
||||
this.bytes = bytes;
|
||||
this.stringLength = stringLength;
|
||||
}
|
||||
|
||||
public Text(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether a {@link BytesReference} view of the data is already materialized.
|
||||
* Whether a {@link ByteBuffer} view of the data is already materialized.
|
||||
*/
|
||||
public boolean hasBytes() {
|
||||
return bytes != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a {@link BytesReference} view of the data.
|
||||
*/
|
||||
public BytesReference bytes() {
|
||||
@Override
|
||||
public ByteBuffer bytes() {
|
||||
if (bytes == null) {
|
||||
bytes = new BytesArray(text.getBytes(StandardCharsets.UTF_8));
|
||||
bytes = StandardCharsets.UTF_8.encode(text);
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
@ -72,11 +79,20 @@ public final class Text implements Comparable<Text>, ToXContentFragment {
|
|||
return text != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a {@link String} view of the data.
|
||||
*/
|
||||
@Override
|
||||
public String string() {
|
||||
return text == null ? bytes.utf8ToString() : text;
|
||||
if (text == null) {
|
||||
text = StandardCharsets.UTF_8.decode(bytes).toString();
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int stringLength() {
|
||||
if (stringLength < 0) {
|
||||
stringLength = string().length();
|
||||
}
|
||||
return stringLength;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -115,8 +131,8 @@ public final class Text implements Comparable<Text>, ToXContentFragment {
|
|||
} else {
|
||||
// TODO: TextBytesOptimization we can use a buffer here to convert it? maybe add a
|
||||
// request to jackson to support InputStream as well?
|
||||
BytesRef br = this.bytes().toBytesRef();
|
||||
return builder.utf8Value(br.bytes, br.offset, br.length);
|
||||
assert bytes.hasArray();
|
||||
return builder.utf8Value(bytes.array(), bytes.arrayOffset() + bytes.position(), bytes.remaining());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* 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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public
|
||||
* License v3.0 only", or the "Server Side Public License, v 1".
|
||||
*/
|
||||
|
||||
package org.elasticsearch.xcontent;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
public interface XContentString {
|
||||
/**
|
||||
* Returns a {@link String} view of the data.
|
||||
*/
|
||||
String string();
|
||||
|
||||
/**
|
||||
* Returns a UTF8-encoded {@link ByteBuffer} view of the data.
|
||||
*/
|
||||
ByteBuffer bytes();
|
||||
|
||||
/**
|
||||
* Returns the number of characters in the represented string.
|
||||
*/
|
||||
int stringLength();
|
||||
}
|
|
@ -36,7 +36,6 @@ import org.elasticsearch.common.component.AbstractLifecycleComponent;
|
|||
import org.elasticsearch.common.settings.ClusterSettings;
|
||||
import org.elasticsearch.common.settings.Setting;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.util.CollectionUtils;
|
||||
import org.elasticsearch.common.util.concurrent.AbstractRunnable;
|
||||
import org.elasticsearch.common.util.concurrent.CountDown;
|
||||
|
@ -56,6 +55,7 @@ import org.elasticsearch.tasks.TaskId;
|
|||
import org.elasticsearch.tasks.TaskManager;
|
||||
import org.elasticsearch.threadpool.Scheduler;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
|
|
@ -13,8 +13,8 @@ import org.elasticsearch.common.Priority;
|
|||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.io.stream.Writeable;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.core.TimeValue;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
|
|
@ -23,12 +23,12 @@ import org.elasticsearch.common.bytes.ReleasableBytesReference;
|
|||
import org.elasticsearch.common.collect.ImmutableOpenMap;
|
||||
import org.elasticsearch.common.geo.GeoPoint;
|
||||
import org.elasticsearch.common.settings.SecureString;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.util.Maps;
|
||||
import org.elasticsearch.common.util.set.Sets;
|
||||
import org.elasticsearch.core.CharArrays;
|
||||
import org.elasticsearch.core.Nullable;
|
||||
import org.elasticsearch.core.TimeValue;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.io.EOFException;
|
||||
import java.io.FilterInputStream;
|
||||
|
@ -391,13 +391,23 @@ public abstract class StreamInput extends InputStream {
|
|||
if (length == -1) {
|
||||
return null;
|
||||
}
|
||||
return new Text(readBytesReference(length));
|
||||
byte[] bytes = new byte[length];
|
||||
if (length > 0) {
|
||||
readBytes(bytes, 0, length);
|
||||
}
|
||||
var byteBuff = ByteBuffer.wrap(bytes);
|
||||
return new Text(byteBuff);
|
||||
}
|
||||
|
||||
public Text readText() throws IOException {
|
||||
// use StringAndBytes so we can cache the string if it's ever converted to it
|
||||
// use Text so we can cache the string if it's ever converted to it
|
||||
int length = readInt();
|
||||
return new Text(readBytesReference(length));
|
||||
byte[] bytes = new byte[length];
|
||||
if (length > 0) {
|
||||
readBytes(bytes, 0, length);
|
||||
}
|
||||
var byteBuff = ByteBuffer.wrap(bytes);
|
||||
return new Text(byteBuff);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
|
|
@ -22,11 +22,11 @@ import org.elasticsearch.common.compress.CompressorFactory;
|
|||
import org.elasticsearch.common.geo.GeoPoint;
|
||||
import org.elasticsearch.common.io.stream.Writeable.Writer;
|
||||
import org.elasticsearch.common.settings.SecureString;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.util.ByteUtils;
|
||||
import org.elasticsearch.core.CharArrays;
|
||||
import org.elasticsearch.core.Nullable;
|
||||
import org.elasticsearch.core.TimeValue;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.XContentType;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -419,7 +419,7 @@ public abstract class StreamOutput extends OutputStream {
|
|||
writeInt(spare.length());
|
||||
write(spare.bytes(), 0, spare.length());
|
||||
} else {
|
||||
BytesReference bytes = text.bytes();
|
||||
BytesReference bytes = BytesReference.fromByteBuffer(text.bytes());
|
||||
writeInt(bytes.length());
|
||||
bytes.writeTo(this);
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ import org.elasticsearch.common.document.DocumentField;
|
|||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.io.stream.Writeable;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.util.Maps;
|
||||
import org.elasticsearch.common.xcontent.ChunkedToXContent;
|
||||
import org.elasticsearch.common.xcontent.XContentHelper;
|
||||
|
@ -39,6 +38,7 @@ import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
|
|||
import org.elasticsearch.search.lookup.Source;
|
||||
import org.elasticsearch.transport.LeakTracker;
|
||||
import org.elasticsearch.transport.RemoteClusterAware;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContentFragment;
|
||||
import org.elasticsearch.xcontent.ToXContentObject;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
|
|
|
@ -12,10 +12,10 @@ package org.elasticsearch.search;
|
|||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.io.stream.Writeable;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.core.Nullable;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
import org.elasticsearch.transport.RemoteClusterAware;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
|
|
|
@ -21,7 +21,6 @@ import org.apache.lucene.util.CollectionUtil;
|
|||
import org.elasticsearch.common.CheckedSupplier;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.lucene.Lucene;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.index.IndexSettings;
|
||||
import org.elasticsearch.index.mapper.IdFieldMapper;
|
||||
import org.elasticsearch.index.mapper.MappedFieldType;
|
||||
|
@ -34,6 +33,7 @@ import org.elasticsearch.lucene.search.uhighlight.QueryMaxAnalyzedOffset;
|
|||
import org.elasticsearch.lucene.search.uhighlight.Snippet;
|
||||
import org.elasticsearch.search.fetch.FetchContext;
|
||||
import org.elasticsearch.search.fetch.FetchSubPhase;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.BreakIterator;
|
||||
|
|
|
@ -23,7 +23,6 @@ import org.apache.lucene.search.vectorhighlight.SimpleFragListBuilder;
|
|||
import org.apache.lucene.search.vectorhighlight.SingleFragListBuilder;
|
||||
import org.elasticsearch.common.settings.Setting;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.util.CollectionUtils;
|
||||
import org.elasticsearch.index.mapper.MappedFieldType;
|
||||
import org.elasticsearch.index.mapper.TextSearchInfo;
|
||||
|
@ -33,6 +32,7 @@ import org.elasticsearch.search.fetch.FetchSubPhase;
|
|||
import org.elasticsearch.search.fetch.subphase.highlight.SearchHighlightContext.Field;
|
||||
import org.elasticsearch.search.fetch.subphase.highlight.SearchHighlightContext.FieldOptions;
|
||||
import org.elasticsearch.search.lookup.Source;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.BreakIterator;
|
||||
|
|
|
@ -12,7 +12,7 @@ package org.elasticsearch.search.fetch.subphase.highlight;
|
|||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.io.stream.Writeable;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContentFragment;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
|
||||
|
|
|
@ -24,12 +24,12 @@ import org.apache.lucene.search.highlight.SimpleSpanFragmenter;
|
|||
import org.apache.lucene.search.highlight.TextFragment;
|
||||
import org.apache.lucene.util.BytesRefHash;
|
||||
import org.elasticsearch.common.lucene.Lucene;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.index.IndexSettings;
|
||||
import org.elasticsearch.index.mapper.MappedFieldType;
|
||||
import org.elasticsearch.lucene.search.uhighlight.QueryMaxAnalyzedOffset;
|
||||
import org.elasticsearch.search.fetch.FetchContext;
|
||||
import org.elasticsearch.search.fetch.FetchSubPhase;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
|
|
@ -19,12 +19,12 @@ import org.elasticsearch.common.Strings;
|
|||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.io.stream.Writeable;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.core.Nullable;
|
||||
import org.elasticsearch.index.fielddata.IndexFieldData;
|
||||
import org.elasticsearch.search.DocValueFormat;
|
||||
import org.elasticsearch.search.sort.SortAndFormats;
|
||||
import org.elasticsearch.xcontent.ParseField;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContentObject;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.xcontent.XContentParser;
|
||||
|
|
|
@ -14,13 +14,13 @@ import org.elasticsearch.common.io.stream.NamedWriteable;
|
|||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.io.stream.Writeable;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.rest.action.search.RestSearchAction;
|
||||
import org.elasticsearch.search.aggregations.Aggregation;
|
||||
import org.elasticsearch.search.suggest.Suggest.Suggestion.Entry;
|
||||
import org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option;
|
||||
import org.elasticsearch.search.suggest.completion.CompletionSuggestion;
|
||||
import org.elasticsearch.xcontent.ParseField;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContentFragment;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
|
||||
|
|
|
@ -19,10 +19,10 @@ import org.apache.lucene.search.suggest.document.CompletionQuery;
|
|||
import org.apache.lucene.search.suggest.document.TopSuggestDocs;
|
||||
import org.apache.lucene.search.suggest.document.TopSuggestDocsCollector;
|
||||
import org.apache.lucene.util.CharsRefBuilder;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.index.mapper.CompletionFieldMapper;
|
||||
import org.elasticsearch.search.suggest.Suggest;
|
||||
import org.elasticsearch.search.suggest.Suggester;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
|
|
|
@ -14,12 +14,12 @@ import org.apache.lucene.util.PriorityQueue;
|
|||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.lucene.Lucene;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.util.Maps;
|
||||
import org.elasticsearch.common.util.set.Sets;
|
||||
import org.elasticsearch.search.SearchHit;
|
||||
import org.elasticsearch.search.suggest.Suggest;
|
||||
import org.elasticsearch.xcontent.ParseField;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
|
|
@ -19,7 +19,6 @@ import org.apache.lucene.util.BytesRef;
|
|||
import org.apache.lucene.util.BytesRefBuilder;
|
||||
import org.apache.lucene.util.CharsRefBuilder;
|
||||
import org.elasticsearch.common.lucene.Lucene;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.index.query.AbstractQueryBuilder;
|
||||
import org.elasticsearch.index.query.ParsedQuery;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
|
@ -31,6 +30,7 @@ import org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option;
|
|||
import org.elasticsearch.search.suggest.Suggester;
|
||||
import org.elasticsearch.search.suggest.SuggestionSearchContext.SuggestionContext;
|
||||
import org.elasticsearch.search.suggest.phrase.NoisyChannelSpellChecker.Result;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.XContentFactory;
|
||||
import org.elasticsearch.xcontent.XContentParser;
|
||||
|
||||
|
|
|
@ -11,9 +11,9 @@ package org.elasticsearch.search.suggest.phrase;
|
|||
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.search.suggest.Suggest;
|
||||
import org.elasticsearch.search.suggest.Suggest.Suggestion;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
|
|
|
@ -16,13 +16,13 @@ import org.apache.lucene.search.spell.SuggestWord;
|
|||
import org.apache.lucene.util.BytesRef;
|
||||
import org.apache.lucene.util.BytesRefBuilder;
|
||||
import org.apache.lucene.util.CharsRefBuilder;
|
||||
import org.elasticsearch.common.bytes.BytesArray;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.search.suggest.Suggester;
|
||||
import org.elasticsearch.search.suggest.SuggestionSearchContext.SuggestionContext;
|
||||
import org.elasticsearch.search.suggest.phrase.DirectCandidateGenerator;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -47,7 +47,8 @@ public final class TermSuggester extends Suggester<TermSuggestionContext> {
|
|||
indexReader,
|
||||
suggestion.getDirectSpellCheckerSettings().suggestMode()
|
||||
);
|
||||
Text key = new Text(new BytesArray(token.term.bytes()));
|
||||
var termBytes = token.term.bytes();
|
||||
Text key = new Text(ByteBuffer.wrap(termBytes.bytes, termBytes.offset, termBytes.length));
|
||||
TermSuggestion.Entry resultEntry = new TermSuggestion.Entry(key, token.startOffset, token.endOffset - token.startOffset);
|
||||
for (SuggestWord suggestWord : suggestedWords) {
|
||||
Text word = new Text(suggestWord.string);
|
||||
|
@ -96,7 +97,8 @@ public final class TermSuggester extends Suggester<TermSuggestionContext> {
|
|||
TermSuggestion termSuggestion = new TermSuggestion(name, suggestion.getSize(), suggestion.getDirectSpellCheckerSettings().sort());
|
||||
List<Token> tokens = queryTerms(suggestion, spare);
|
||||
for (Token token : tokens) {
|
||||
Text key = new Text(new BytesArray(token.term.bytes()));
|
||||
var termBytes = token.term.bytes();
|
||||
Text key = new Text(ByteBuffer.wrap(termBytes.bytes, termBytes.offset, termBytes.length));
|
||||
TermSuggestion.Entry resultEntry = new TermSuggestion.Entry(key, token.startOffset, token.endOffset - token.startOffset);
|
||||
termSuggestion.addTerm(resultEntry);
|
||||
}
|
||||
|
|
|
@ -10,12 +10,12 @@ package org.elasticsearch.search.suggest.term;
|
|||
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.search.suggest.SortBy;
|
||||
import org.elasticsearch.search.suggest.Suggest;
|
||||
import org.elasticsearch.search.suggest.Suggest.Suggestion;
|
||||
import org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option;
|
||||
import org.elasticsearch.xcontent.ParseField;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
|
|
@ -11,9 +11,9 @@ package org.elasticsearch.action.admin.cluster.tasks;
|
|||
|
||||
import org.elasticsearch.cluster.service.PendingClusterTask;
|
||||
import org.elasticsearch.common.Priority;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.test.AbstractChunkedSerializingTestCase;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@ import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
|||
import org.elasticsearch.common.lucene.Lucene;
|
||||
import org.elasticsearch.common.lucene.search.TopDocsAndMaxScore;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.util.BigArrays;
|
||||
import org.elasticsearch.common.util.concurrent.AtomicArray;
|
||||
import org.elasticsearch.common.util.concurrent.EsExecutors;
|
||||
|
@ -71,6 +70,7 @@ import org.elasticsearch.tasks.TaskId;
|
|||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.threadpool.TestThreadPool;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
|
||||
|
|
|
@ -13,7 +13,6 @@ import org.apache.lucene.search.SortField;
|
|||
import org.apache.lucene.search.TotalHits;
|
||||
import org.elasticsearch.ElasticsearchException;
|
||||
import org.elasticsearch.action.search.TransportSearchAction.SearchTimeProvider;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.time.DateFormatter;
|
||||
import org.elasticsearch.core.Tuple;
|
||||
import org.elasticsearch.index.Index;
|
||||
|
@ -40,6 +39,7 @@ import org.elasticsearch.search.suggest.completion.CompletionSuggestion;
|
|||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.transport.RemoteClusterAware;
|
||||
import org.elasticsearch.transport.RemoteClusterService;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.junit.Before;
|
||||
|
||||
import java.time.ZoneId;
|
||||
|
|
|
@ -16,13 +16,13 @@ import org.elasticsearch.common.Strings;
|
|||
import org.elasticsearch.common.bytes.BytesArray;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.geo.GeoPoint;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.unit.DistanceUnit;
|
||||
import org.elasticsearch.core.PathUtils;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.xcontent.NamedObjectNotFoundException;
|
||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||
import org.elasticsearch.xcontent.ParseField;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContent;
|
||||
import org.elasticsearch.xcontent.ToXContentObject;
|
||||
import org.elasticsearch.xcontent.XContent;
|
||||
|
@ -43,6 +43,7 @@ import java.io.ByteArrayOutputStream;
|
|||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Path;
|
||||
import java.time.DayOfWeek;
|
||||
|
@ -376,7 +377,7 @@ public abstract class BaseXContentTestCase extends ESTestCase {
|
|||
assertResult("{'text':''}", () -> builder().startObject().field("text", new Text("")).endObject());
|
||||
assertResult("{'text':'foo bar'}", () -> builder().startObject().field("text", new Text("foo bar")).endObject());
|
||||
|
||||
final BytesReference random = new BytesArray(randomBytes());
|
||||
final var random = ByteBuffer.wrap(randomBytes());
|
||||
XContentBuilder builder = builder().startObject().field("text", new Text(random)).endObject();
|
||||
|
||||
try (XContentParser parser = createParser(xcontentType().xContent(), BytesReference.bytes(builder))) {
|
||||
|
@ -384,7 +385,7 @@ public abstract class BaseXContentTestCase extends ESTestCase {
|
|||
assertSame(parser.nextToken(), Token.FIELD_NAME);
|
||||
assertEquals(parser.currentName(), "text");
|
||||
assertTrue(parser.nextToken().isValue());
|
||||
assertThat(new BytesRef(parser.charBuffer()).utf8ToString(), equalTo(random.utf8ToString()));
|
||||
assertThat(new BytesRef(parser.charBuffer()).utf8ToString(), equalTo(StandardCharsets.UTF_8.decode(random).toString()));
|
||||
assertSame(parser.nextToken(), Token.END_OBJECT);
|
||||
assertNull(parser.nextToken());
|
||||
}
|
||||
|
@ -590,7 +591,10 @@ public abstract class BaseXContentTestCase extends ESTestCase {
|
|||
objects.put("{'objects':[1,1,2,3,5,8,13]}", new Object[] { 1L, 1L, 2L, 3L, 5L, 8L, 13L });
|
||||
objects.put("{'objects':[1,1,2,3,5,8]}", new Object[] { (short) 1, (short) 1, (short) 2, (short) 3, (short) 5, (short) 8 });
|
||||
objects.put("{'objects':['a','b','c']}", new Object[] { "a", "b", "c" });
|
||||
objects.put("{'objects':['a','b','c']}", new Object[] { new Text("a"), new Text(new BytesArray("b")), new Text("c") });
|
||||
objects.put(
|
||||
"{'objects':['a','b','c']}",
|
||||
new Object[] { new Text("a"), new Text(StandardCharsets.UTF_8.encode("b")), new Text("c") }
|
||||
);
|
||||
objects.put("{'objects':null}", null);
|
||||
objects.put("{'objects':[null,null,null]}", new Object[] { null, null, null });
|
||||
objects.put("{'objects':['OPEN','CLOSE']}", IndexMetadata.State.values());
|
||||
|
@ -636,7 +640,7 @@ public abstract class BaseXContentTestCase extends ESTestCase {
|
|||
object.put("{'object':1}", (short) 1);
|
||||
object.put("{'object':'string'}", "string");
|
||||
object.put("{'object':'a'}", new Text("a"));
|
||||
object.put("{'object':'b'}", new Text(new BytesArray("b")));
|
||||
object.put("{'object':'b'}", new Text(StandardCharsets.UTF_8.encode("b")));
|
||||
object.put("{'object':null}", null);
|
||||
object.put("{'object':'OPEN'}", IndexMetadata.State.OPEN);
|
||||
object.put("{'object':'NM'}", DistanceUnit.NAUTICALMILES);
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
*/
|
||||
package org.elasticsearch.search.fetch.subphase.highlight;
|
||||
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.index.mapper.MappedFieldType;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
|
@ -12,9 +12,9 @@ package org.elasticsearch.search.fetch.subphase.highlight;
|
|||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.search.SearchResponseUtils;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContent;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.xcontent.XContentFactory;
|
||||
|
|
|
@ -44,7 +44,6 @@ import org.elasticsearch.action.OriginalIndices;
|
|||
import org.elasticsearch.action.search.SearchRequest;
|
||||
import org.elasticsearch.action.search.SearchShardTask;
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.core.CheckedConsumer;
|
||||
import org.elasticsearch.index.query.MatchAllQueryBuilder;
|
||||
import org.elasticsearch.index.query.ParsedQuery;
|
||||
|
@ -61,6 +60,7 @@ import org.elasticsearch.search.suggest.SuggestBuilder;
|
|||
import org.elasticsearch.search.suggest.Suggester;
|
||||
import org.elasticsearch.search.suggest.SuggestionSearchContext;
|
||||
import org.elasticsearch.test.TestSearchContext;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
|
|
|
@ -21,7 +21,6 @@ import org.apache.lucene.util.BytesRef;
|
|||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.geo.GeoPoint;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.util.BigArrays;
|
||||
import org.elasticsearch.index.fielddata.IndexFieldData;
|
||||
import org.elasticsearch.search.DocValueFormat;
|
||||
|
@ -30,6 +29,7 @@ import org.elasticsearch.search.sort.BucketedSort;
|
|||
import org.elasticsearch.search.sort.SortAndFormats;
|
||||
import org.elasticsearch.search.sort.SortOrder;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.XContent;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.xcontent.XContentFactory;
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
package org.elasticsearch.search.suggest;
|
||||
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.search.SearchHit;
|
||||
import org.elasticsearch.search.SearchHitTests;
|
||||
import org.elasticsearch.search.SearchResponseUtils;
|
||||
|
@ -18,6 +17,7 @@ import org.elasticsearch.search.suggest.completion.CompletionSuggestion;
|
|||
import org.elasticsearch.search.suggest.completion.CompletionSuggestion.Entry.Option;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.xcontent.ObjectParser;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContent;
|
||||
import org.elasticsearch.xcontent.XContentParser;
|
||||
import org.elasticsearch.xcontent.XContentType;
|
||||
|
|
|
@ -17,7 +17,6 @@ import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
|||
import org.elasticsearch.common.io.stream.NamedWriteableAwareStreamInput;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.core.CheckedFunction;
|
||||
import org.elasticsearch.rest.action.search.RestSearchAction;
|
||||
import org.elasticsearch.search.SearchModule;
|
||||
|
@ -33,6 +32,7 @@ import org.elasticsearch.test.TransportVersionUtils;
|
|||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||
import org.elasticsearch.xcontent.ObjectParser;
|
||||
import org.elasticsearch.xcontent.ParseField;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContent;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.xcontent.XContentFactory;
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
package org.elasticsearch.search.suggest;
|
||||
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.xcontent.XContentHelper;
|
||||
import org.elasticsearch.search.suggest.Suggest.Suggestion.Entry;
|
||||
import org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option;
|
||||
|
@ -20,6 +19,7 @@ import org.elasticsearch.search.suggest.term.TermSuggestion;
|
|||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.xcontent.ObjectParser;
|
||||
import org.elasticsearch.xcontent.ParseField;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContent;
|
||||
import org.elasticsearch.xcontent.XContentParser;
|
||||
import org.elasticsearch.xcontent.XContentType;
|
||||
|
|
|
@ -10,11 +10,11 @@
|
|||
package org.elasticsearch.search.suggest;
|
||||
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.search.suggest.Suggest.Suggestion.Entry.Option;
|
||||
import org.elasticsearch.search.suggest.phrase.PhraseSuggestion;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.xcontent.ConstructingObjectParser;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContent;
|
||||
import org.elasticsearch.xcontent.XContentParser;
|
||||
import org.elasticsearch.xcontent.XContentType;
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
package org.elasticsearch.search.suggest;
|
||||
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.rest.action.search.RestSearchAction;
|
||||
import org.elasticsearch.search.SearchResponseUtils;
|
||||
import org.elasticsearch.search.suggest.Suggest.Suggestion;
|
||||
|
@ -22,6 +21,7 @@ import org.elasticsearch.search.suggest.term.TermSuggestion;
|
|||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.xcontent.NamedObjectNotFoundException;
|
||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContent;
|
||||
import org.elasticsearch.xcontent.XContent;
|
||||
import org.elasticsearch.xcontent.XContentParser;
|
||||
|
|
|
@ -10,11 +10,11 @@
|
|||
package org.elasticsearch.search.suggest;
|
||||
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.search.suggest.term.TermSuggestion;
|
||||
import org.elasticsearch.search.suggest.term.TermSuggestion.Entry.Option;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.xcontent.ConstructingObjectParser;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.ToXContent;
|
||||
import org.elasticsearch.xcontent.XContentParser;
|
||||
import org.elasticsearch.xcontent.XContentType;
|
||||
|
|
|
@ -9,9 +9,9 @@
|
|||
|
||||
package org.elasticsearch.search.suggest.completion;
|
||||
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.search.suggest.Suggest;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
|
|
@ -14,7 +14,6 @@ import org.elasticsearch.action.search.SearchType;
|
|||
import org.elasticsearch.action.support.IndicesOptions;
|
||||
import org.elasticsearch.common.bytes.BytesArray;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.xcontent.XContentHelper;
|
||||
import org.elasticsearch.core.TimeValue;
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
|
@ -38,6 +37,7 @@ import org.elasticsearch.search.suggest.SuggestBuilder;
|
|||
import org.elasticsearch.search.vectors.KnnSearchBuilder;
|
||||
import org.elasticsearch.search.vectors.RescoreVectorBuilder;
|
||||
import org.elasticsearch.test.AbstractQueryTestCase;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.xcontent.XContentFactory;
|
||||
import org.elasticsearch.xcontent.XContentParser;
|
||||
|
|
|
@ -24,7 +24,6 @@ import org.elasticsearch.common.bytes.BytesArray;
|
|||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.document.DocumentField;
|
||||
import org.elasticsearch.common.lucene.Lucene;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.util.concurrent.ConcurrentCollections;
|
||||
import org.elasticsearch.common.xcontent.XContentParserUtils;
|
||||
import org.elasticsearch.core.RefCounted;
|
||||
|
@ -55,6 +54,7 @@ import org.elasticsearch.xcontent.ConstructingObjectParser;
|
|||
import org.elasticsearch.xcontent.InstantiatingObjectParser;
|
||||
import org.elasticsearch.xcontent.ObjectParser;
|
||||
import org.elasticsearch.xcontent.ParseField;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.xcontent.XContentParser;
|
||||
|
||||
|
|
|
@ -15,7 +15,6 @@ import org.apache.lucene.index.FilterLeafReader;
|
|||
import org.apache.lucene.index.IndexableField;
|
||||
import org.apache.lucene.index.LeafReader;
|
||||
import org.apache.lucene.index.StoredFields;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.mapper.MapperServiceTestCase;
|
||||
import org.elasticsearch.index.mapper.ParsedDocument;
|
||||
|
@ -30,6 +29,7 @@ import org.elasticsearch.search.fetch.subphase.highlight.HighlightPhase;
|
|||
import org.elasticsearch.search.fetch.subphase.highlight.Highlighter;
|
||||
import org.elasticsearch.search.fetch.subphase.highlight.PlainHighlighter;
|
||||
import org.elasticsearch.search.lookup.Source;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
|
|
@ -20,7 +20,6 @@ import org.apache.lucene.search.QueryVisitor;
|
|||
import org.apache.lucene.search.ScoreMode;
|
||||
import org.apache.lucene.search.Scorer;
|
||||
import org.apache.lucene.search.Weight;
|
||||
import org.elasticsearch.common.text.Text;
|
||||
import org.elasticsearch.common.xcontent.support.XContentMapValues;
|
||||
import org.elasticsearch.index.mapper.MappedFieldType;
|
||||
import org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.DenseVectorFieldType;
|
||||
|
@ -33,6 +32,7 @@ import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
|
|||
import org.elasticsearch.search.fetch.subphase.highlight.HighlightUtils;
|
||||
import org.elasticsearch.search.fetch.subphase.highlight.Highlighter;
|
||||
import org.elasticsearch.search.vectors.VectorData;
|
||||
import org.elasticsearch.xcontent.Text;
|
||||
import org.elasticsearch.xpack.core.ml.search.SparseVectorQueryWrapper;
|
||||
import org.elasticsearch.xpack.inference.mapper.OffsetSourceField;
|
||||
import org.elasticsearch.xpack.inference.mapper.OffsetSourceFieldMapper;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue