Условие эластичного поиска при сортировке в java

#java #spring #spring-boot #elasticsearch

#java #spring #spring-boot #elasticsearch

Вопрос:

Для сортировки по одному полю я использую этот код

 searchSourceBuilder.sort(SortBuilders.fieldSort("count").order(SortOrder.DESC));
  

но теперь мне нужно добавить условие, подобное этому

 searchSourceBuilder.sort(SortBuilders.fieldSort(count <= 0 ? "visitor":"visitor" * "count").order(SortOrder.DESC));
  

Я не получаю никакой подсказки для этого. Возможно ли это в elasticsearch или мне нужно сделать это другим способом?

Ответ №1:

Что вам нужно использовать, так это SortBuilders.scriptSort() (сортировка на основе скриптов), например:

 Script script = new Script( "doc.count.value <= 0 ? doc.visitor.value : doc.visitor.value * doc.count.value");
SortBuilders.scriptSort(script, ScriptSortType.NUMBER).order(SortOrder.DESC);