我已通过扩展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
}
答案 0 :(得分:0)
您可以使用本地参数来实现这一点 - 在本地参数中传递用户数据并将查询设置为$projectTeam[$member->id]->imgClass = 'alpha'
。
来自Solr文档:"本地参数提供了一种将元数据添加到某些参数类型(如查询字符串)的方法。"
在自定义解析器构造函数中,您可以从*:*
变量访问这些参数。
https://lucene.apache.org/solr/guide/6_6/local-parameters-in-queries.html