我正在为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)
当字段为multivalued = false时,这部分代码可以正常工作,但是最近我们不得不进行更改,并将其设置为multivalued = true。 我们想要一种在自定义函数查询Java代码中访问多值字符串字段的方法。
My solr version is: 7.5.0 Lucene Version is: 7.5.0 Java version : 11.0.1 JVM 18.9