Я хочу добиться какой-то «случайной» сортировки с помощью библиотеки hibernate searchasticsearch.Я делаю следующее:
Реализация FieldComparator:
public class RandomOrderFieldComparator extends FieldComparator<Integer> {
private final Random randomGenerator = new Random();
@Override
public int compare(int slot1, int slot2) {
return randomGenerator.nextInt();
}
@Override
public void setTopValue(Integer value) {
//not needed as the purpose is to generate random integers w
}
@Override
public Integer value(int slot) {
return randomGenerator.nextInt();
}
@Override
public LeafFieldComparator getLeafComparator(LeafReaderContext context) throws IOException {
return null;
}
}
Реализация FieldComparatorSource
public class SampleFieldComparatorSource extends FieldComparatorSource {
@Override
public FieldComparator<?> newComparator(String fieldname, int numHits, int sortPos, boolean reversed) throws IOException {
return new RandomOrderFieldComparator();
}
}
Наконец, создайте пользовательский SortField, предоставляющий FieldComparatorSource:
queryBuilder
.sort()
.byNative(
new SortField(
"id",
new SampleFieldComparatorSource()
)
);
Проблема заключается в том, что он по-прежнему генерирует запрос, используя обычную сортировку в поле 'id', и компаратор никогда не бываетХит:
"sort": [
{
"id": {
"order": "asc"
}
}
]
Что я делаю не так и каков наилучший способ реализации "случайной" сортировки с использованием библиотеки поиска hibernate?