0

我正在为 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 代码中访问多值字符串字段的方法。

我的 solr 版本是:7.5.0
Lucene 版本为:7.5.0
Java 版本:11.0.1 JVM 18.9
4

0 回答 0