/* * Hibernate Search, full-text search for your domain model * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.query.dsl.sort.impl; import java.io.IOException; import org.apache.lucene.search.FieldComparator; import org.apache.lucene.search.FieldComparatorSource; import org.apache.lucene.search.SortField; import org.hibernate.search.exception.SearchException; /** * A SortField extension that simply serves as a data holder, to be detected * and interpreted by non-Lucene backend implementations (Elasticsearch in particular). * @author Yoann Rodiere */ public class NativeSortField extends SortField { private static final FieldComparatorSource FAILING_COMPARATOR_SOURCE = new FieldComparatorSource() { @Override public FieldComparator<?> newComparator(String fieldname, int numHits, int sortPos, boolean reversed) throws IOException { throw new SearchException( "This sort field should never have been executed in the first place." + " This is probably a result of queryBuilder.sort().byNative(String) being called while using the Lucene backend." + " This method is only provided for use with the Elasticsearch backend." ); } }; private final String nativeSortDescription; public NativeSortField(String fieldName, String nativeSortFieldDescription) { /* * Superclass is irrelevant here: we just want to extend SortField to be able * to put this native sort field in a Sort, so that non-standard backends such as Elasticsearch * may integrate the native sort field description (a string) directly in their native sort * representation. */ super( fieldName, FAILING_COMPARATOR_SOURCE ); this.nativeSortDescription = nativeSortFieldDescription; } /** * @return the native sort description */ public String getNativeSortDescription() { return nativeSortDescription; } }