package pl.allegro.tech.search.elasticsearch.tools.reindex.query; import pl.allegro.tech.search.elasticsearch.tools.reindex.connection.ElasticSearchQuery; import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; public class StringPrefixSegmentation extends SegmentationQueryTrait implements QuerySegmentation { private final String fieldName; private final List<PrefixSegment> prefixSegmentsList; public StringPrefixSegmentation(String fieldName, List<String> prefixesList, ElasticSearchQuery query) { super(query); this.fieldName = fieldName; this.prefixSegmentsList = Collections.unmodifiableList( prefixesList.stream().map(PrefixSegment::new).collect(Collectors.toList())); } @Override public Optional<String> getFieldName() { return Optional.of(fieldName); } @Override public int getSegmentsCount() { return prefixSegmentsList.size(); } @Override public Optional<BoundedSegment> getThreshold(int i) { return Optional.of(prefixSegmentsList.get(i)); } public static QuerySegmentation create(String fieldName, List<String> segmentationPrefixes, ElasticSearchQuery query) { return new StringPrefixSegmentation(fieldName, segmentationPrefixes, query); } }