Я пишу пользовательский запрос функции solr для многозначного строкового поля в solr.Ниже приведен мой код:
import org.apache.solr.common.util.NamedList;
import org.apache.solr.search.ValueSourceParser;
import org.apache.solr.search.FunctionQParser;
import org.apache.solr.search.SyntaxError;
import java.util.HashSet;
import org.apache.lucene.queries.function.ValueSource;
public class sortOnXSourceParser extends ValueSourceParser {
public void init(NamedList namedList) {
}
public ValueSource parse(FunctionQParser fqp) throws SyntaxError {
ValueSource source = fqp.parseValueSource();
HashSet<Integer> topic_ids = new HashSet<Integer>();
while(fqp.hasMoreArguments()){
topic_ids.add(fqp.parseInt());
}
return new sortOnXSource(source, topic_ids);
}
}
Мой код компилируется нормально, и когда вызывается эта функция, он выдает ошибку в
ValueSource source = fqp.parseValueSource();
Эта функция вызывается для сортировки документов.основанный на многозначном поле с именем x с этим синтаксисом
sortOnX(x, 309043) desc
и исключение, которое отображается в журналах solr:
2019-01-04 06:32:01.972 ERROR (qtp1573605215-22) [ x:emr-20181210] o.a.s.h.RequestHandlerBase org.apache.solr.common.SolrException: Can't determine a Sort Order (asc or desc) in sort spec 'sortOnX(x, 309043) desc', pos=28
at org.apache.solr.search.SortSpecParsing.parseSortSpecImpl(SortSpecParsing.java:173)
at org.apache.solr.search.SortSpecParsing.parseSortSpec(SortSpecParsing.java:60)
at org.apache.solr.search.QParser.getSortSpec(QParser.java:280)
Эта часть кода работала нормально, когда поле было многозначным = falseно недавно нам пришлось внести изменения и сделать это поле многозначным = истинным. Мы хотим получить доступ к многозначному строковому полю в пользовательской функции, запрашивающей код Java.
My solr version is: 7.5.0
Lucene Version is: 7.5.0
Java version : 11.0.1 JVM 18.9