我面临一个奇怪的问题。看起来像SolrJ API中的错误:
当我尝试使用edismax运行搜索查询时,“qf”字段未正确编码。
我正在尝试将此作为我的“ qf ”值:
标题^ 40 + details_plain ^ 20
SolrQuery.set()方法将此添加到查询中,因为它无法正常工作,因为它需要进行网址编码。
当我自己对其进行url编码时,它变为:
QF =标题%5E40 + details_plain%5E20
但是,当我在查询中设置它时,生成的最终查询会再次自动对其进行编码并生成它:
QF =标题%255E40%2Bdetails_plain%255E20
哪个也错了,查询无法说“未定义的字段文本”,因为Solr不知道我想搜索什么,所以它试图搜索默认的“text”字段。
以下是代码中的代码段:
SolrClient solr=null;
SolrQuery query = new SolrQuery();
solr = new CloudSolrClient(zookeepers, "/" );
query.set("deftype", searchConfig.getDeftype());
//query.set("df", "details_plain"); //unless i uncomment it the query fails as qf is not correct
query.set("fl", searchConfig.getFl());
query.set("mm", searchConfig.getMm());
query.set("qf", searchConfig.getQf());
query.set("rows", searchConfig.getRows());
query.set("q", searchPhrase);
query.set("collection", searchConfig.getCollection_name());
query.set("indent", "on");
query.set("omitHeader", "true");
query.set("wt", "json");
QueryResponse response = solr.query(query);
为什么不对原始字符串进行编码,如果我将其作为编码字符串发送,则再次对其进行编码?
我可能会忽视某些事情,所以让我知道你们都在想什么。我做错了什么或者我应该只获得Solr源代码并尝试自己解决这个问题?
答案 0 :(得分:0)
据我所知,你不应该在任何领域编码。编码/解码部分由solrj透明地处理。
答案 1 :(得分:0)
解决。在这里发布解决方案,让任何可能不幸的人犯下我所犯的同样愚蠢的错误。
问题在于这一行:
query.set("deftype", searchConfig.getDeftype());
参数名称应为" defType"用大写字母而不是像小字号那样:
query.set("defType", searchConfig.getDeftype());
理想情况下,在这样的服务中,参数名称应全部为小写,以免浪费人们在这样的问题上的时间,但它就是这样。也许在另一个SOLR版本中,他们将使参数名称忽略大小写。人们可以希望!