Solr没有文本搜索

时间:2018-02-24 13:01:42

标签: solr solr6

我已通过扩展CustomScoreProvider在solr中成功实现了自定义搜索。但问题是我需要传递一些用户信息,如31,1,我需要自定义排序。

q={!mycustomparser}31+1+*:*

它充当文本搜索。有没有办法可以跳过这个文本搜索,只能传递用户信息。

一些代码。

public class MyCustomParserPlugin extends QParserPlugin {

    @Override
    public QParser createParser(String querystring, SolrParams slocParams, SolrParams params, SolrQueryRequest req) {
        return new MyCustomParser(querystring, slocParams, params, req);        
    }

    private static class MyCustomParser extends QParser{

        private Query inQuery;

        public MyCustomParser(String querystring, SolrParams slocParams, SolrParams params, SolrQueryRequest req) {
            super(querystring, slocParams, params, req);
            try {
                QParser parser = getParser(querystring, getReq());
                this.inQuery = parser.parse();
            }catch(SyntaxError ex) {
                throw new RuntimeException("error parsing query", ex);
            }
        }

        @Override
        public Query parse() throws SyntaxError {
            return new MatchingQuery(inQuery);
        }

    }

}

=========================================

public class MatchingQuery extends CustomScoreQuery {

    private Query subQuery;

    public MatchingQuery(Query subQuery) {
        super(subQuery);
        this.subQuery = subQuery;
    }

    @Override
    protected CustomScoreProvider getCustomScoreProvider(LeafReaderContext context) {
        return new MyCustomSortClz(subQuery, context);
    }
}

=========================================

public class MyCustomSortClz extends CustomScoreProvider {

  // ---> my sort
}

1 个答案:

答案 0 :(得分:0)

您可以使用本地参数来实现这一点 - 在本地参数中传递用户数据并将查询设置为$projectTeam[$member->id]->imgClass = 'alpha'

来自Solr文档:"本地参数提供了一种将元数据添加到某些参数类型(如查询字符串)的方法。"

在自定义解析器构造函数中,您可以从*:*变量访问这些参数。

https://lucene.apache.org/solr/guide/6_6/local-parameters-in-queries.html