我目前正致力于用Solr替换现有的搜索平台。我是Solr的新手,目前正在使用Solr Version 6.6.0。旧系统接受带有搜索参数的JSON对象。因此,我被要求实现一个自定义查询解析器,它接受JSON格式的查询字符串 基本上没有其他参数传递给Solr,除了" q"其中包含以JSON格式的字符串编码的所有必需参数。然后,查询解析器本身提取执行查询所需的所有公共参数和本地参数 除了" fl"参数不会给出期望的结果。这意味着查询结果由文档中存在的所有字段组成。代码看起来像这样;
public static final String FIELD_LIST = "fl";
用于存储键值对的集合。
HashMap<String,Object> paramMap = new HashMap<String, Object>();
解码并格式化字段列表。
String ifld = getFieldList();
参数放在集合中。
paramMap.put(Constants.FIELD_LIST,ifld);
然后生成SolrParams。
return SolrParams.toSolrParams(new NamedList<>(paramMap));
每个查询参数都以这种方式处理,最后在查询解析器parse()方法中我有这个。
//calls the factory method to get the appropriate request type translator
JSONRequestTranslator jrt = (JSONRequestTranslator)JSONQParser.getTranslator(requestType);
//converts the arguments to solrparams.
qstr = jrt.getQueryString();
localParams = jrt.getLocalParams();
params = jrt.getParams();
req.setParams(SolrParams.wrapDefaults(params, this.req.getParams()));
return jrt.parse(qstr, localParams, params, req);
实现JSONRequestTranslator接口的类中的parse()方法如下所示
@Override
public Query parse(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) throws SyntaxError {
return new DisMaxQParser(qstr, localParams, params, req).parse();
}
这很好但是&#34; fl&#34;参数似乎没有效果。我在solrconfig.xml文件中没有默认设置,而在调试时我总是找到&#34; fl&#34;参数设置为正确的值。我已经尝试了其他几种方法,比如编写自定义搜索组件插件,但请解释如何解决这个问题以及我在这里缺少什么。谢谢。