【发布时间】:2016-04-05 21:06:45
【问题描述】:
我遇到了一个奇怪的问题。看起来像 SolrJ API 中的一个错误:
当我尝试使用 edismax 运行搜索查询时,“qf”字段未正确编码。
我正在尝试将此用作我的“qf”值:
title^40+details_plain^20
SolrQuery.set() 方法将其添加到查询中,因为它需要进行 url 编码,所以它不起作用。
当我自己对它进行 url 编码时,它变成:
qf=title%5E40+details_plain%5E20
但是,当我在查询中设置它时,生成的最终查询会自动再次对其进行编码并使其成为:
qf=title%255E40%2Bdetails_plain%255E20
这也是错误的,查询失败说“未定义的字段文本”,因为 Solr 不知道我要搜索什么,所以它试图搜索默认的“文本”字段。
这是代码中的一个sn-p:
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 源代码并尝试自己解决这个问题?
【问题讨论】:
标签: java encoding solr solrj solrcloud