如何在自定义Solr函数查询中读取多值字符串字段?

时间:2019-01-04 06:59:33

标签: java solr lucene

我正在为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

0 个答案:

没有答案